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