Вход: непустой взвешенный граф G =(V, E) с произвольными весами ребер. Вершины графа пронумерованы от 1 до n. Граф G представлен матрицей смежности.
Требуется найти длины кратчайших путей между всеми парами вершин графа, если в графе нет циклов отрицательной суммарной длины.
Алгоритм:
Пусть di,jk – длина кратчайшего пути от i до j, который кроме самих вершин i, j проходит только через вершины 1…k.
При этом матрица смежности D0 = ( di,j0 ).
Для di,jk возможны два варианта (выбирается минимальный из них с учётом способа указания в матрице смежности несуществующих рёбер):
1) Кратчайший путь между i и j не проходит через вершину k, тогда di,jk = di,jk-1.
2) Существует более короткий путь между i и j, проходящий через k, тогда он сначала идёт от i до k, а потом от k до j. В этом случае, di,jk = di,kk-1 + dk,jk-1.
Алгоритм Флойда последовательно вычисляет все значения di,jk, для k от 1 до n. Полученные значения di,jn являются длинами кратчайших путей между вершинами i и j. Решением является матрица Dn = ( di,jn ).
Сложность алгоритма Флойда составляет O(n3).