2.4.3. Алгоритм Флойда
Алгоритмы Дийкстры и Форда предназначены для поиска длин кратчайших путей из данной вершины sв остальные вершины графа. При решении прикладных задач часто бывает необходимо найти длины кратчайших путей из каждой вершины графа в каждую из остальных. Задача может быть решенаN-кратным применением алгоритма Форда, однако более прост и эффективен алгоритм Флойда, специально предназначенный для этой цели. ОбозначимD0={dij0} матрицу длин ребер данного графа, причемdii0=0,dij0=, если ребра(i,j)в графе нет,dij0=aijв остальных случаях. МатрицуD0 можно считать матрицей длин кратчайших путей, проходящих через 0 промежуточных вершин. Далее в алгоритме Флойда последовательно вычисляются матрицы D1,…, DN, где матрицаDk является матрицей длин кратчайших путей, проходящих через вершины1,…,k. Пусть матрицаDk-1={dijk-1} известна. Кратчайший путь изiвj, проходящий через вершины1,…,k, либо проходит через вершинуk, либо нет. Во втором случае его длинаdijk равнаdijk-1, а в первом он является объединением кратчайших путей через1…k-1изiвkи изkвj, поэтому
dijk=min{ dijk-1, dikk-1+dkjk-1}.
Теперь можно описать алгоритм Флойда
Шаг 1. Построить матрицу D0,
Шаг 2. Для k=1,…,Nвычислить матрицыD1,…, DNпо правилуdijk=min{ dijk-1, dikk-1+dkjk-1}.
Рис 2.10
Пример 4. Для графа на рис. 2.10 вычисление длин кратчайших путей по алгоритму Флойда приводит к следующим результатам:
Матрица D6является матрицей длин кратчайших путей данного графа. Наличие в ней элементов, равных бесконечности, означает, что для данных пар узлов ни одного пути в графе не имеется. Сами пути могут быть найдены по матрицамD0иD6с помощью «обратного просмотра». Например, для пути из 1 в 6 последней вершиной является 6, а предпоследней должна быть вершинаkтакая, чтоd1,66=d1,k6+dk,60. Легко видеть, что это вершина 4. Далее аналогично можно найти вершину, предшествующую 4, и так далее, до вершины 1. В итоге получается путь {1,3,5,4,6}.
- Министерство образования Российской Федерации
- 1. Элементы теории графов.
- 1.1. Основные понятия теории графов
- 1.2. Способы задания графов
- 1.3. Связность графов
- 1.4. Изоморфизм графов
- 1.5. Планарные графы
- 1.6. Эйлеровы графы
- 1.7. Гамильтоновы графы
- 1.8. Деревья
- Контрольные вопросы
- 2. Задачи и алгоритмы
- 2.1. Алгоритмы поиска
- 2.2. Раскраска в графах
- 2.3. Алгоритмы построения деревьев
- 2.4. Алгоритмы поиска путей
- 2.4.1. Алгоритм Дийкстры
- 2.4.2. Алгоритм Форда
- 2.4.3. Алгоритм Флойда
- 2.5. Потоковые алгоритмы
- 2.5.1. Определения и постановки задач
- 2.5.2. Алгоритм поиска максимального потока
- 2.5.3. Алгоритм поиска потока минимальной стоимости
- 2.5.4. Динамический поток
- 2.5.5. Алгоритм дефекта
- Контрольные вопросы
- 3. Задачи для самостоятельного решения
- 4. Литература
- Содержание