Der Bellmann-Ford-Algorithmus ist ein Algorithmus zur Berechnung kürzester Wege von einem Knoten zu allen anderen Knoten in gewichteten Graphen. Anders als beim Dijkstra-Algorithmus, dürfen Kanten hier auch negativ gewichtet sein.
Idee
- Wir wissen, dass jeder kürzeste Weg in einem Graphen ein Pfad in einem Baum ist, d.h. er besteht höchstens aus
Knoten - Das Relaxationsprinzip wird also
mal für jede Kante benutzt
Implementierung
Pseudocode
Seien
- Algorithmus BellmanFord(
, , ): - Für jeden Knoten
: .dist = .pred = NULL
.dist = 0 - Wiederhole
mal: - Für jede Kante
: - Falls
.dist > .dist + : .dist = .dist + .pred =
- Falls
- Für jede Kante
- Für jede Kante
: Negativer Zyklus? - Falls
.dist > .dist + : - return “Negativer Zyklus!”
- Falls
- Für jeden Knoten
Laufzeit
Da wir
Durch vorzeitiges Abbrechen der Schleife wenn sich keine Pfade mehr seit der letzten Iteration geändert haben, lässt sich die Laufzeit
erzielen.