1

Ich möchte ein Diagramm in seine Komponenten aufteilen (wie im folgenden Beispiel DAG). Beachten Sie die farbigen Kennungen jedes Knotens, wie sie dargestellt werden die Komponenten). Nachdem ich die Komponenten im Bild gefunden habe, möchte ich den Stamm und das letzte Kind dieser Komponente finden. Nehmen wir zum Beispiel die Komponente blue, die Wurzel ist E und das letzte Kind ist H. Grün: Wurzel B - letztes Kind H.Aufteilen eines gerichteten azyklischen Graphen (DAG) in Komponenten, dann Suchen des Stamm- und letzten untergeordneten Objekts in diesen Komponenten

Beispiel grafische Darstellung: Example Graph

Wenn Sie eine Verbindung zwischen E finden - H, B-E, B-H, A-I ohne sie in Komponenten aufzuteilen. Lass es mich wissen, denn das ist mein letztes Ziel.

Über das Kompilieren von Komponenten. Das ist eigentlich mein Endziel. Ich wollte das nur einbeziehen, um vielleicht ein besseres Verständnis dafür zu bekommen, was ich erreichen möchte. Das kann ich nicht, wenn ich diese Verbindungen finde.

Fragen fand ich hilfreich, aber meine Frage nicht beantwortet:

(Diese Antworten ausreichend sein, aber ich weiß nicht, wie zu implementieren es)

Hinweis:

  • Bitte senden Sie alle Beispielcode in C++ oder C# (wenn du gehst, Beispiel-Code schreiben)

  • Dies ist meine erste Frage. Wenn ich etwas falsch gemacht habe, lass es mich wissen.

// Big edit: Überarbeitete die Frage zu machen, mehr klar, was ich will. Einführung von Komponenten, wie ich denke, dass das hilfreicher sein wird.

+0

Ich habe die Antwort für 2 Tage vor dieser Frage gesucht und werde fortfahren. Wird die Antwort natürlich posten, wenn ich eine finde! – Glaze

+0

Möchten Sie die LCA für alle Eltern des Startknotens berechnen (dies führt möglicherweise nicht zu einem Ergebnis für Grafiken mit mehreren Minimalelementen) oder suchen Sie nach dem _closes_-Knoten, der eine LCA für mindestens 2 Eltern Ihres Startknotens ist (Dies könnte mehrere Lösungen haben). Um den Unterschied zu sehen, fügen Sie dem Beispielgraphen die Kanten '(C, H), (D, H)' hinzu - wäre das gewünschte Ergebnis 'E' oder 'B' für den Startknoten' H'? – collapsar

+0

Vielen Dank für Ihren Kommentar! Wirklich guter Punkt! Ich werde das Diagramm und die Frage zu einem komplexeren Diagramm aktualisieren, um genau zu zeigen, was ich will. – Glaze

Antwort

0

zu lang für einen Kommentar, aber ich glaube nicht, dass Sie alle die gemeinsamen Vorfahren zu finden:

Von wikipedia:

In der Graphentheorie und Informatik, den kleinsten gemeinsamen Vorfahren (LCA) von zwei Knoten v und w in einem Baum oder gerichteten azyklischen Graphen (DAG) ist der niedrigste (dh tiefste) Knoten, der sowohl v als auch w als Nachkommen hat, wobei wir jeden Knoten als Nachkommen von sich selbst definieren (also wenn v einen direkte Verbindung von w, w ist der niedrigste gemeinsame Vorfahre).

Wenn Sie die LCA der Eltern betrachten, dann gibt es vier Eltern von Vertex H die C sind, D, F und G dann können Sie die LCA prüfen die Werte für jedes Paar von Eltern sein:

  • LCA(C, D) = B
  • LCA(C, F) = C
  • LCA(C, G) = C
  • LCA(D, F) = D
  • LCA(D, G) = D
  • LCA(F, G) = E

so sind die Ökobilanzen der Eltern von HB, C, D und E.

Die gemeinsamen Vorfahren wird die niedrigsten gemeinsamen Vorfahren (n) und ihre Vorfahren sein - so A, B, C, D und E.

Sie müssen angeben, warum A, C und als gemeinsame Vorfahren ausgeschlossen werden.

+0

Zunächst. Vielen Dank, dass Sie sich die Zeit genommen haben, mein Problem zu beheben. Sie wissen was! Ich habe geschrieben, um zu erklären, wie du falsch liegst. Aber du hast recht. Da ich zwei Verbindungen von "H" zu "C" durch F-E-C und G-E-C finden kann. Das bedeutet, dass sie "verbunden" sind. Ich werde das Diagramm noch einmal aktualisieren! – Glaze

+0

@Glaze Was Sie tun scheint scheint "biconnected Komponenten" eines gerichteten azyklischen Graphen zu finden ... Also von "B" zu "H" gibt es (mindestens) zwei verschiedene Pfade 'B -> C -> H' und 'B -> D -> H ', wo es keine gemeinsamen Kanten zwischen den Pfaden gibt und die einzigen gemeinsamen Ecken die Endpunkte sind. "A" bis "H" haben diese zwei unterschiedlichen Pfade nicht, da alle Pfade die Kante "A -> B" und den Knoten "B" enthalten. – MT0

+0

Googeln für biconnected Komponenten fand ich genau das, was ich will. Nachdem ich das Diagramm in zweifach verbundene Komponenten aufgeteilt habe, kann ich leicht die Verbindungen finden, die ich suche.Vielleicht können Sie eine Antwort schreiben wie "Sie suchen tatsächlich nach zweifach verbundenen Komponenten" und ich werde es als beantwortet markieren. Genau darum geht es in der Frage. Btw, darüber habe ich gesprochen, als ich "Subsysteme" erwähnte. – Glaze