2009-11-04 6 views
1

안녕하세요. 저는 문제에 대한 작업을하고 있고 도움이 될 수 있습니다. 저는 C#으로 작업하고 있습니다. 난 할 노력하고있어데이터 구조와 같은 트리

다음과 같이 데이터 구조를 만드는 것입니다 :

내가 한 페이지에 x와 y 좌표로 항목을 레이아웃 할 필요가

. 실제 레이아웃은 문제가되지 않습니다. 유효한 좌표 세트가 있어야합니다.

내 목록의 각 항목에는 시작 항목에 시작 요소로 정의 된 부모가없는 여러 부모와 여러 자식이있을 수 있습니다.

이제 각 요소의 좌표를 가져 와서 모든 것이 가운데에있는 어린이 위의 부모와 올바르게 배치되도록해야합니다.

요소에 하위 요소가 하나만있는 경우 하위 요소가 같은 x 좌표에서 부모 요소 아래에 배치됩니다. 부모 요소에 두 개 이상의 자식 요소가있는 경우 동등한 공백으로 배치되고 부모 요소가 있어야합니다. 어린이의 중간에 두 개의 길이가 같은 두 줄이있는 부모는 부모의 자녀 모두와 합류한다.

또한 요소가 둘 이상의 수준에서 부모를 가질 수도 있습니다.

나는 누군가가 나에게 어떤 생각이나 충고를 가지고 있다면 더 나은 예를 보여주기 위해 노력하고있는 그래픽 파일이 있습니다. 귀하의 관심과 내가 당신에게 파일을 메일로 보낼 수 있는지 알려주세요.

감사합니다.

+2

실제 문제는 무엇입니까? 아니면 누군가가 당신을 위해 코드를 작성하기를 원합니까? 이 질문은 사양과 비슷합니다. –

+0

죄송합니다. 부모 노드를 중심으로 정렬하는 데 문제가 있습니다. 자식 노드를 기반으로 행의 요소를 이동해야하므로이 위치가 목록의 다른 항목에 영향을 미칠 수 있으므로 다시 배치해야합니다. 이 요소를 기반으로 다른 모든 것을 재배치하는 방법을 알기가 어렵습니다. 이 데이터 구조를 생성하는 일종의 긴 쿼리가 있지만 때로는 공간이 잘못되어 모든 노드를 가운데로 맞출 수 없습니다. 그게 너에게 도움이된다면 내가하려는 일에 대한 이미지가 있니? 감사합니다. Irfan. – Iffy

답변

1

데이터에 대한 추가 제한 없이는 불가능하다고 생각합니다. 예를 들어 데이터에 사이클이 포함될 수 있습니다.이 경우 부모가 어린이보다 위에 머무르는 것은 불가능합니다.

난 당신이 나무와 같은 그래프 필요하지 그 알고리즘 생각할 수 :

요소를 위해 필요한 폭을 계산 아래에서 위로
  1. :
    • 리프 노드 1의
    • 는 N 개의 자식 노드를 갖고, X는 넓은 아이
  2. 레이아웃 바닥 WI 위쪽에서 그래프의 폭 노드에 대한 T * N 개를 X,의 노드의 계산 된 너비와 관련하여
+0

답장을 보내 주셔서 감사합니다 Ziggystar하지만 각 요소의 너비가 고정 언급하는 것을 잊어 버렸습니다.또한 바닥에는 요소의 최대 개수가 없을 수 있습니다. 중간 높이 중 하나가 노드의 수 또는 레벨의 최소 및 최대 값에서의 노드와 관련하여 가장 많은 공간을 차지할 수있는 다른 트리가있는 곳입니다. – Iffy

관련 문제