2.4.2. Алгоритм Форда
Алгоритм Дийкстры может находить кратчайшие пути только в случае, если длины ребер aijнеотрицательны, в противном случае метки просмотренных вершин, т.е. включенных в множествоS, не обязательно являются длинами кратчайших путей, и алгоритм не всегда находит правильное решение.
Рис. 2.8
Например, при поиске путей из вершины 1 для графа, изображенного на рис 2.8, вершина 1 получит метку 0, вершины 2 и 3 – метки 2 и 1. Далее минимальной будет метка вершины 3, и вершина 4 получит метку 2, которая в дальнейшем не изменится, поскольку вершина 3 уже просмотрена. Между тем кратчайший путь в 4 проходит через вершины 1,2,3,4 и имеет длину 1. Более того, при наличии ребер отрицательной длины в графе может присутствовать контур отрицательной длины, и тогда кратчайших путей вообще не существует, поскольку длину пути всегда можно уменьшить, добавляя к нему несколько обходов этого контура.
Рис. 2.9
Алгоритм Форда представляет собой простую модификацию алгоритма Дийкстры для случая, когда длины ребер могут быть отрицательными. На шаге 4 алгоритма следует проводить вычисление новых меток не для kS, а для всех соседних сnвершин. Если при этом изменяется метка у вершины, уже входящей в множествоS, то ее следует снова исключить изS. Таким образом, одна вершина может быть просмотрена несколько раз. Если в графеNвершин, то простой путь не может содержать более чемNвершин. Следовательно, если при раборе алгоритма Форда какая-либо вершина просматривается более чемNраз, это значит, что в графе имеется контур отрицательной длины.
Пример 3. Для графа на рис. 2.9 вычисление длин кратчайших путей из вершины 1 с помощью алгоритма Форда дает следующие результаты. Выделены метки вершин, входящих в S.
Итерация | Вершина | ||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
0 | 0 | | | | | | | | |
1 | 0 | 4 | | 4 | | 5 | | | |
2 | 0 | 4 | 7 | 4 | | 5 | | | |
3 | 0 | 3 | 7 | 4 | 6 | 5 | | | |
4 | 0 | 3 | 6 | 4 | 6 | 5 | | | |
5 | 0 | 3 | 6 | 3 | 6 | 5 | | | |
6 | 0 | 2 | 6 | 3 | 5 | 5 | | | |
7 | 0 | 2 | 5 | 3 | 5 | 5 | | | |
8 | 0 | 2 | 5 | 3 | 5 | 5 | | | |
9 | 0 | 2 | 5 | 3 | 5 | 5 | | | |
10 | 0 | 2 | 5 | 3 | 5 | 5 | | | |
11 | 0 | 2 | 5 | 3 | 5 | 5 | | | |
12 | 0 | 2 | 5 | 3 | 5 | 5 | | | |
13 | 0 | 2 | 5 | 3 | 4 | 5 | | | |
14 | 0 | 2 | 5 | 3 | 4 | 5 | | | |
15 | 0 | 2 | 5 | 3 | 4 | 5 | | | |
16 | 0 | 2 | 5 | 3 | 4 | 5 | | | |
При выполнении алгоритма некоторые вершины просматриваются несколько раз. Дерево кратчайших путей представлено на рис. 2.9.
- Министерство образования Российской Федерации
- 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. Литература
- Содержание