Алгоритм Дейкстры
Дано: непyстой взвешенный гpаф G=(V,E) с неотрицательными весами ребер (дуг). Требуется найти кpатчайший пyть от s к t (st).
Инициализация:
-
всем веpшинам vi пpиписывается метка - вещественное число: d(s)=0, d(vi)=+ для всех vis;
-
метки всех вершин, кроме s, считаются вр'еменными, метка s - постоянной;
-
вершина s объявляется текущей (c:=s);
-
все ребра (дуги) считаются непомеченными.
Основная часть:
-
для всех вершин uj, инцидентных текущей вершине c, метки которых являются временными, пересчитываем эти метки по формуле: d(uj):=min{d(uj), d(c)+Weight(c,uj)} (*), где (c,uj) - ребро (дуга), соединяющая вершины c и uj, а Weight(c,uj) - ее вес; при наличии кратных ребер выбирается ребро с минимальным весом;
-
если метки всех вершин являются постоянными либо равны , то путь не существует; ВЫХОД("нет решения");
-
иначе находим среди вершин с временными метками (среди всех таких вершин, а не только тех, чьи метки изменились в результате последнего выполнения шага (1)!) вершину x с минимальной меткой, объявляем ее метку постоянной, помечаем ребро (дугу) (c',x), такое, что d(x) = d(c')+Weight(c',x), где c'=с либо c' - вершина, бывшая текущей на одном из предыдущих шагов (c'=с, если на шаге (1) при uj=x реализовалась вторая часть формулы (*)), и делаем эту вершину текущей (c:=x);
-
если c=t, то найден путь длины d(t), который можно восстановить следующим образом: это тот путь между s и t, который состоит только из помеченных на шаге (3) ребер (дуг) (можно доказать, что он существует и единственен); ВЫХОД("решение найдено");
-
иначе переходим на шаг (1).
~
Алгоритм Дейкстры не всегда находит правильное решение в случае произвольных весов ребер (дуг) графа. Например, для орграфа, изображенного на рисунке, алгоритм Дейкстры найдет маршрут s(s,t)t длины 1 между вершинами s и t, а не минимальный маршрут длины 2+(-2)=0, проходящий через третью вершину графа.
Пример орграфа, для которого неприменим алгоритм Дейкстры.
- 1. Элементы теории графов
- Основные определения
- Пути и циклы
- Деревья
- Цикломатическое число и фундаментальные циклы
- Планарные графы
- Раскраски графов
- Графы с атрибутами
- Независимые множества и покрытия
- 2. Задачи и алгоритмы
- Кратчайшие пути
- Волновой алгоритм
- Алгоритм Дейкстры
- Кратчайшее остовное дерево
- Алгоритм Прима