Последовательный алгоритм Флойда.
Алгоритм Флойда находит кратчайшие пути между любыми двумя узлами сети. В этом алгоритме сеть представлена в виде квадратной матрицы с n строками и n столбцами. Элемент (i, j) равен расстоянию d
ij от узла i к узлу j, которое имеет конечное значение, если существует дуга (i, j), и равен бесконечности в противном случае.
Покажем сначала основную идею метода Флойда. Пусть есть три узла i, j и k и заданы расстояния между ними. Если выполняется неравенство d
ij + d
jk <
d
ik, то целесообразно заменить путь i -> k путем i -> j -> k. Такая замена (далее ее будем условно называть треугольным оператором) выполняется систематически в процессе выполнения алгоритма Флойда.
Треугольный оператор.
- Последовательный алгоритм Флойда
-
for (k =
0;
k < n; k++)
for (i =
0;
i < n; i++)
for (j
=
0;
j < n; j++)
D[i, j] = min(D[i, j], D[i, k] + D[k, j]);
Основной шаг k. Задаем строку k и столбец k как ведущую строку и ведущий столбец. Над матрицей D выполняется n итераций. После k-й итерации D
ij содержит значение наименьшей длины пути из вершины i в вершину j, причем путь не проходит через вершины с номерами большими k.
Вычисление на k-ой итерации выполняется по формуле: min{D[i, j], D[i, k] + D[k,j]}(Рассматриваем возможность применения треугольного оператора ко всем элементам матрицы).
Для вычисления проводится сравнение величины D
ijk-1 (то есть стоимость пути от вершины i к вершине j без участия вершины k или другой вершины с более высоким номером) с величиной D
ikk-1+D
kjk-1 (стоимость пути от вершины i к вершине k плюс стоимость пути от вершины k до вершины j). Если путь через вершину k “дешевле”, чем D
ijk-1, то величина D
ijk изменяется.

Иллюстрация метода Флойда.