Unterabschnitte
Wir durchsuchen den Graphen mit einer Tiefensuche (DFS). Dabei gehen wir die Adjazenslisten der Knoten durch. Dabei sind die Knoten,
- die noch nicht besucht sind, blau
- die besucht worden sind, schwarz
- und die gerade noch auf dem Stack liegen, für welche die DFS also noch läuft, grün
Die dabei explorierten Kanten werden folgendermaßen genannt:
- Baumkante: Wenn der Zielknoten beim explorieren der Kante blau ist. (ganz normale Kante)
- Vorwärtskante: Wenn der Zielknoten beim explorieren der Kante schwarz ist. (d.h. der Index, der dem Zielknoten bei der Tiefesuche zugeteilt worden ist, ist größer als der Index von dem momentanen Knoten)
- Rückwärtskante: Wenn der Zielknoten beim explorieren der Kante grün ist. (d.h. das die Tiefensuche für diesen Knoten nicht abgeschlossen ist.) Der Knotenindex des Zielknotens ist kleiner als der Knotenindex des momentanen Knotens. Wir haben in diesem Fall einen Zyklus gefunden.
- Seitwärtskante: Alle übrigen Kanten. Die Tiefensuche kann vollständig abgeschlossen sein, ohne das ein Teilgraph besucht worden ist, wenn dieser von diesem Bereich nicht explorierbar ist. Alle Kanten, die von diesem Bereich dann in den alten schon abgeschlossenen Bereich führen, werden Seitwärtskanten genannt.
Eine topologische Sortierung kann nur dann vorliegen, wenn der Graph keine Zyklen hat. Der Knoten, der keine Vorgänger hat, bekommt die topologische Sortierungsnummer 1. Dann gehen wir nacheinander die Adjazenslisten mittels Breitensuche durch und numerieren die einzelnen Knoten durch, die wir in die Schlange einfügen.
Der Algorithmus funktioniert wie folgt:
- Wir gehen den Graphen mit Hilfe einer Tiefensuche durch. Dabei bestimmen wir den Schwarzfärbungsindex eines jeden Knotens. Der Schwarzfärbungsindex ist die Reihenfolge in der die Knoten von der Tiefensuche wieder verlassen werden und schwarz gefärbt werden.
- Wir drehen alle Kanten um. D.h. wir erzeugen aus dem Graphen den inversen Graphen
- Wir lassen wiederum die Tiefensuche laufen. Dabei starten wir diese immer wieder von dem Knoten mit dem höchsten Schwarzfärbungsindex, der noch nicht besucht ist. Heraus kommt dann ein DFS-Wald. Jeder Baum im Wald ist eine SCC.