Дано: непyстой взвешенный гpаф G=(V, R) с пpоизвольными
весами ребер (дуг). Требуется найти длины кpатчайших пyтей между всеми
парами вершин графа, если в графе нет циклов (контуров) отрицательной суммарной
длины, либо обнаружить наличие таких контуров.
Инициализация:
1. Построим матрицу A0 размерности n x n,
элементы которой определяются по правилу:
-
dii0= 0;
-
dij0= Weight(vi, vj),
где i<>j, если в графе существует ребро (дуга) (vi,
vj);
-
dij0= -1 , где i<>j,
если нет ребра (дуги) (vi, vj).
2.
m:=0.
Основная часть:
1. Построим матрицу Dm+1 по Dm,
вычисляя ее элементы следующим образом:
dijm+1=min{dijm,
di(m+1)m + d(m+1)jm},
где i<>j; diim+1=0 (*).
Если dimm + dmim <
0 для какого-то i, то в графе существует цикл (контур) отрицательной
длины, проходящий через вершину vi; ВЫХОД.
2. m:=m+1; если m < n, то повторяем шаг
(1), иначе элементы последней построенной матрицы D|n|
равны длинам кратчайших путей между соответствующими вершинами; ВЫХОД.
КОНЕЦ