Алгоритм Левита
Алгоритм Левита находит расстояние от заданной вершины до всех остальных. Работает с ребрами отрицательного веса.
Содержание
Алгоритм
Пусть - текущая длина кратчайшего пути до вершины . Изначально, для всех ; .
Разделим вершины на три множества:
- - вершины, расстояние до которых уже вычислено(возможно, не окончательно)
- - вершины, расстояние до которых вычисляется
- - вершины, расстояние до которых не вычисленно
Изначально все вершины, кроме помещаются в множество . Вершина помещается в множество .
На каждом шаге выбирается вершина из множества . Переводим эту вершину во множество . Для каждого ребра :
- если , то переносим в и релаксируем ребро
- если , то релаксируем ребро
- если , то переносим в и релаксируем ребро
Алгоритм завершается, когда множество становится пустым.