2009-11-04 5 views
1

Bonjour je travaille sur un problème et je pourrais faire avec de l'aide, je travaille en C#.Structure de données arborescente

Ce que je suis en train de faire est de créer une structure de données comme suit:

Je dois la mise en page sur l'article avec x et y coordonnées sur une page. Maintenant, la mise en page réelle n'est pas un problème est plus d'avoir un ensemble valide de coordonnées.

Chaque élément de ma liste peut avoir plusieurs parents et plusieurs enfants si l'élément de départ n'a pas de parent, ce qui le définit comme élément de départ.

Maintenant tout ce que je dois faire est d'obtenir les coordonnées pour chaque élément de sorte que tout est positionné correctement avec les parents au-dessus des enfants dans une position centrée.

Si un élément n'a qu'un seul enfant, l'enfant est placé sous le parent sur la même coordonnée x, si le parent a plus d'un enfant, les enfants sont séparés par des espaces égaux et le parent doit être au milieu au-dessus des enfants à deux lignes de longueur égale se joindre aux deux enfants du parent.

Un élément peut également avoir des parents dans plusieurs niveaux.

J'ai un fichier graphique de ce que j'essaie de faire pour vous donner un meilleur exemple si quelqu'un a des idées ou des conseils pour moi. Faites-moi savoir si votre intéressé et je peux vous laisser un mail avec le fichier aussi.

Merci

+2

Quelle est la véritable question avec laquelle vous avez des problèmes? ou voulez-vous simplement que quelqu'un écrive le code pour vous? Cette question se lit comme une spécification. –

+0

Désolé de ne pas être clair, je rencontre des problèmes avec le centrage de l'élément parent car parfois vous devez déplacer des éléments sur la ligne en fonction des nœuds childrent et cette repositionnement peut affecter d'autres éléments de la liste, alors ils doivent être re -positionné et il est difficile de savoir comment repositionner tout le reste sur la base de cet élément. J'ai une longue requête qui crée une sorte de structure de données, mais elle s'interrompt parfois et je ne peux pas centrer tous les nœuds. J'ai une image de ce que j'essaie de faire si cela peut vous aider? Merci Irfan. – Iffy

Répondre

1

je pense que ce n'est pas possible sans restrictions supplémentaires sur les données. Par exemple, les données peuvent contenir un cycle, auquel cas il est impossible de tenir la condition que les parents sont dessinés au-dessus des enfants.

je pouvais penser à un algorithme qui fait ce que vous avez besoin pour un graphique arborescente:

  1. de bas en haut calculer la largeur nécessaire pour un élément:
    • qui est 1 pour les nœuds de feuilles
    • il est n * x pour un noeud T, qui a des noeuds enfants de n et x est la largeur de la plus large enfant
  2. layout graphique du haut en bas wi le respect de la largeur calculée des nœuds
+0

Merci pour votre réponse Ziggystar mais j'ai oublié de mentionner que la largeur de chaque élément est fixe.Aussi le bas peut ne pas avoir le nombre maximum d'éléments car c'est là son différent d'un arbre où l'un des niveaux moyens pourrait prendre le plus d'espace en ce qui concerne le nombre de nœuds ou juste des nœuds aux valeurs min et max sur le niveau. – Iffy

Questions connexes