Comment convertir le Graphe Dirigé Acyclique (DAG) de l'Arbre

J'ai été à la recherche pour le C# exemples de transformer un DAG dans un Arbre.

Quelqu'un aurait-il un des exemples ou des pointeurs dans la bonne direction?

Clarification de mise à Jour

J'ai un graphique qui contient la liste des modules que ma demande est nécessaire pour charger. Chaque module dispose d'une liste de modules dont il dépend. Pour exemple voici mes modules, A, B, C, D et E

  • Un n'a pas de dépendances
  • B dépend de A, C et E
  • C dépend d'Un
  • D dépend d'Un
  • E dépend de C et Un

Je veux résoudre les dépendances et de générer un arbre qui ressemble à ça...

--Un

--+--B

-----+--C

---------+--D

--+--E

Tri Topologique

Merci pour l'information, si j'effectue un tri Topologique et d'inverser la sortie, j'aurai l'ordre suivant

  • Un
  • B
  • C
  • D
  • E

Je veux maintenir la structure hiérarchique, de sorte que mes modules sont chargés dans le bon contexte, par exemple... module E doivent être dans le même conteneur que B

Grâce

Rohan

comment voulez-vous traiter avec des diamants...- > B -> C, B & C -> D
C'est une bonne question, je vois un problème, mais ne sais pas comment le résoudre, que feriez-vous? Mon experiance avec la théorie des graphes est très limitée.
Vous avez le choix entre 1) sélectionnez le premier, 2) choisir les 3 derniers) dupliquer le nœud. selon ce qui est le meilleur est entièrement fonction de l'application, 3, le plus facile est suivi par 1 suivi de 2... il est difficile de dire ce que vous voulez l'arbre sur la base de la question. diamant dépendances sont une chienne en général
ShuggyCoUk, avez-vous un exemple de code ou connaissez des semblables? Je pense que mon graphe a un diamant de dépendance...- > B -> F, B -> E, B -> C, E -> D, C -> D
Les deux BFS et DFS générer un arbre à partir d'un DAG. Ils vous permettent de repérer les diamants (ils doivent le faire pour éviter la traversée des nœuds plus d'une fois), de la naïve utilisation de l'un et l'autre simplement seulement inclure un nœud lorsqu'il est vu pour la première fois.

OriginalL'auteur Rohan West | 2009-03-09