Bei kürzesten Wege Problemen haben wir bisher immer positive Kantenkosten vorausgesetzt und so die Existenz von negativen Zyklen ausgeschlossen. Im folgenden soll nun ein Algorithmus zur Berechnung der kürzesten Wege vorgestellt werden, der auch bei negativen Kantenkosten - im Gegensatz zu den bisherigen Algorithmen - korrekt arbeitet: Der Algorithmus von Floyd ist eine Alternative zu Dijkstra bei single source shortest path.
Gegeben: | G = (V,E) mit zum Teil negativen Kosten |
Gesucht: | kürzester Weg von Knoten A zum Knoten B |
Ähnlich wie bei Dijkstra ersetzt man m[y] durch m[x] + c(x,y) solange es eine Kante (x,y) mit m[x] + c(xy) < m[y] gibt.
Im i -ten Durchgang bestimmt man
Falls nach dem (n - 1) -ten Durchgang immer noch eine Verbesserung der m i[y] -Werte entsteht, so liegt ein negativer Zyklus in G vor, das Problem ist also unbeschränkt.
Auch im all shortest path Algorithmus nach Floyd, welcher negative Kantenkosten verkraftet, muß man überprüfen, ob ein negativer Zyklus vorliegt. Dies ist genau dann der Fall, wenn in der Hauptdiagonalen aller d k-Matrizen ein negativer Eintrag zu finden ist. Das Problem ist in diesem Fall nicht mehr sinnvoll.