Kürzester Weg in DAG finden?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Im Grunde machst du zwei Durchläufe durch dne Graphen von Anfang bis Ende. (Da der Graph azyklisch ist und gerichtet gibt es auch Anfänge und Enden, evtl. zwar mehrere, aber das macht es kaum schwerer.)

Beim ersten Durchlauf sortierst du die Knoten topologisch. Das heißt, dass für jeden Knoten alle seine Nachfolger in der Sortierung danach kommen.
Das schaust du dir am besten einmal an ein paar Beispielen an, dann wird offensichtlich, was das bedeutet.
Der Graph ist dann so sortiert, dass erst alle Vorgänger eines Knoten drankommen, bevor der Knoten selbst an der Reihe ist.

Beim zweiten Durchlauf gehst du dann alle Knoten der Reihe nach durch. Durch die Sortierung arbeitest du erst alle Vorgänger eines Knotens ab, bevor du den Knoten selbst behandelst.
Dadurch kannst du für einen Knoten die jeweiligen Kosten berechnen, indem du die bereits berechneten Kosten aller Vorgänger plus die Kantengewichte vergleichst.

Die topologische Sortierung funktioniert folgendermaßen:
Für jeden Knoten bestimmst du die Menge der noch nicht abgearbeiteten Vorgängerknoten. Ist diese 0, fügst du den Knoten als nächstes Element in der Sortierung hinzu und verringerst die Zahl der noch nicht abgearbeiteten Vorgängerknoten für alle Nachfolger um 1.