
 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