Алгоритм Флойда нахождения кратчайших путей между парами вершин
Предположим, что мы имеем помеченный орграф, который содержит время полета по маршрутам, связывающим определенные города, и~мы хотим построить таблицу, где приводилось бы минимальное время перелета из одного (произвольного) города в любой другой. В этом случае мы сталкиваемся с общей задачей нахождения кратчайших путей, то есть нахождения кратчайших путей между всеми парами вершин орграфа.
Формулировка задачи.Есть ориентированный граф
![](../../../../img/tex/9/d/8/9d8c3143258042d12f2f84cb155bc941.png)
![](../../../../img/tex/3/f/a/3fa3c3fec4898d2050358e1a4279045f.png)
![](../../../../img/tex/0/0/f/00f5e7ecc1a0b902ed0af9e6f74eb4bf.png)
![](../../../../img/tex/8/f/b/8fb9f7fd2afe42c30b1a40df46fd20d3.png)
![](../../../../img/tex/d/0/d/d0d53334df7507e980bf27e269a5dd7e.png)
![](../../../../img/tex/2/4/5/24548001ae9238453b68ec89b50be2c5.png)
![](../../../../img/tex/d/0/d/d0d53334df7507e980bf27e269a5dd7e.png)
![](../../../../img/tex/2/4/5/24548001ae9238453b68ec89b50be2c5.png)
Можно решать эту задачу, последовательно применяя алгоритм Дейкстры для каждой вершины, объявляемой в качестве источника. Но мы для решения поставленной задачи воспользуемся алгоритмом, предложенным Флойдом (R.W. Floyd). Пусть все вершины орграфа последовательно пронумерованы от 1 до
![](../../../../img/tex/a/7/4/a7466f63abf1057fc1e10136891431ed.png)
![](../../../../img/tex/d/3/0/d30a38b81df03cb89bc83f1e49e1424a.png)
![](../../../../img/tex/9/5/1/951a9ba5e20eea39e51b91a8158250fc.png)
![](../../../../img/tex/2/c/9/2c9916ea75b8d465bde3cd779fbec88a.png)
![](../../../../img/tex/0/a/4/0a4d25db6c04bee21fda2c9ac2f23f4c.png)
![](../../../../img/tex/3/6/0/3607bd54e7f7ab7bce0d7a213f4a5dfc.png)
![](../../../../img/tex/3/1/8/318ae5bc2db30ebca23143a34cb02f75.png)
![](../../../../img/tex/1/d/f/1df64ea0f1059020848a106b16840dc5.png)
в вершину
![](../../../../img/tex/5/d/a/5daa4bef3a73169603dc58d7cfebe9b4.png)
Над матрицей
![](../../../../img/tex/3/9/b/39bfa1adef805e1f98298e189c2c0b65.png)
![](../../../../img/tex/a/7/4/a7466f63abf1057fc1e10136891431ed.png)
![](../../../../img/tex/1/2/2/122d5a466568b7a1eeee076b8716864d.png)
![](../../../../img/tex/9/9/d/99dbe18d7b35fd6a2e4d0d3678246cb7.png)
![](../../../../img/tex/1/d/f/1df64ea0f1059020848a106b16840dc5.png)
![](../../../../img/tex/5/d/a/5daa4bef3a73169603dc58d7cfebe9b4.png)
![](../../../../img/tex/1/2/2/122d5a466568b7a1eeee076b8716864d.png)
Вычисление на
![](../../../../img/tex/1/2/2/122d5a466568b7a1eeee076b8716864d.png)
![](../../../../img/tex/8/6/8/868a1c276d9d5f48c9f51e9f01086523.png)
Верхний индекс
![](../../../../img/tex/1/2/2/122d5a466568b7a1eeee076b8716864d.png)
![](../../../../img/tex/3/9/b/39bfa1adef805e1f98298e189c2c0b65.png)
после
![](../../../../img/tex/1/2/2/122d5a466568b7a1eeee076b8716864d.png)
Для вычисления
![](../../../../img/tex/b/4/6/b4603d709f9c4a2572757a8adae3e006.png)
![](../../../../img/tex/4/b/d/4bd488889de107ba768a6ed84818069b.png)
![](../../../../img/tex/1/d/f/1df64ea0f1059020848a106b16840dc5.png)
![](../../../../img/tex/5/d/a/5daa4bef3a73169603dc58d7cfebe9b4.png)
![](../../../../img/tex/1/2/2/122d5a466568b7a1eeee076b8716864d.png)
![](../../../../img/tex/5/f/7/5f77ef7401961911676a2d153413d413.png)
![](../../../../img/tex/1/d/f/1df64ea0f1059020848a106b16840dc5.png)
![](../../../../img/tex/1/2/2/122d5a466568b7a1eeee076b8716864d.png)
![](../../../../img/tex/1/2/2/122d5a466568b7a1eeee076b8716864d.png)
![](../../../../img/tex/5/d/a/5daa4bef3a73169603dc58d7cfebe9b4.png)
![](../../../../img/tex/1/2/2/122d5a466568b7a1eeee076b8716864d.png)
![](../../../../img/tex/d/9/6/d96e7fea0c579e9a8e9e21a3ea35a5ca.png)
![](../../../../img/tex/b/4/6/b4603d709f9c4a2572757a8adae3e006.png)
изменяется. Рассмотрим орграф:
![](image/16-01.jpg)
Рис. 16.1. Помеченный орграф
Матрица A(3 * 3) на нулевой итерации (k = 0)
![](../../../../img/tex/5/f/6/5f6ec8147b6a7c52a7ea6510576da255.png)
Матрица A(3 * 3) после первой итерации (k = 1)
![](../../../../img/tex/8/3/c/83c2fc5505ea1912839ccee9854c6edd.png)
Матрица A(3 * 3) после второй итерации (k = 2)
![](../../../../img/tex/5/6/0/5600c932d848b9686d4c3da35ffaf052.png)
Матрица A(3 * 3) после третьей итерации (k = 3)
![](../../../../img/tex/7/f/8/7f84754c2a58045ae60e46b19a05b5a2.png)