Позволяет находить k-кратчайшие пути без циклов последовательно.
Этот алгоритм предполагает, что мы умеем находить один кратчайший
путь в графе.
Делается это так:
Будем вести список кандидатов в кратчайшие пути.
Hаходится первый кратчайший путь.
Так как все другие пути не должны совпадать с первым путем, то эти остальные
пути не содержат как минимум одно из ребер первого пути. Поэтому,
выкидываем по одному ребру из первого пути и находим кратчайшие пути
в получаемых графах. Hайденные пути (с пометкой о том, какое ребро
было выкинуто) добавляем в список кандидатов.
Из списка кандидатов выбираем самый короткий путь - это
второй самый короткий путь.
Далее находим следующий самый короткий путь аналогично.
При нахождении каждого самого короткого пути в список кандидатов
добавляется не более N новых путей (на самом деле конечно меньше).
При удалении ребра нахождение кратчайшего пути в полученном графе
производится вроде за линейное время. Для этого в исходном графе
алгоритм Дейкстры запускается как от начальной, так и от конечной вершины.
При удалении одного ребра кратчайший путь в новом графе ищется
с использованием деревьев, полученных для исходного графа.
|