62
Далее 1−V раз осуществляется релаксация по всем дугам графа. Далее
проверяется, нет ли контура отрицательной длины, достижимого из источника
s
0
. Если такого контура нет, то оценки λ(v) равны значению веса кратчайшего
пути из s
0
в v, а перечисление предшественников, начиная с π(v), в обратном
порядке позволяет восстановить кратчайший путь.
Для определения контура отрицательной длины, достижимого из источ-
ника s
0
, осуществляется релаксация по всем ребрам. Если хотя бы одна оценка
λ(v) изменит свое значение, то такой контур существует.
Пример:
Рис. 25.
№ итерации
λ(1)/ π(1)
λ(2) / π(2)
λ(3) / π(3)
λ(4) / π(4)
λ(5) / π(5)
λ(6) / π(6)
1 0/NIL 3/1 7/1
∞/NIL ∞/NIL ∞/NIL
2 0/NIL 3/1 5/2 1/3 5/3 2/2
3 0/NIL 3/1 5/2 1/3 2/4 2/2
4 0/NIL 3/1 3/5 -1/3 0/4 1/4
5 0/NIL 2/3 1/5 -3/3 -2/4 0/4
6 0/NIL 0/3 -1/5 -5/3 -4/4 -3/4
Очевидно, что эффективность алгоритма Беллмана-Форда составляет
O(nm), где n и m число вершин и дуг графа соответственно.
Алгоритм Флойда
1
-Уоршала
2
(1962)
Алгоритм Флойда-Уоршала использует технику динамического програм-
мирования и позволяет находить кратчайшие пути между всеми парами вершин
1
Роберт Флойд (Robert Floyd, 1936 – 2001) – американский математик.
2
Стивен Уоршал (Stephen Warshall, 1935 – 2006) – американский математик.
0 3 7 ∞ ∞ ∞
1 0 2 ∞ ∞ -1
A = ∞ -1 0 -4 4 ∞
∞ ∞ ∞ 0 1 2
∞ ∞ 1 ∞ 0 3
∞ ∞ ∞ 5 ∞ 0