:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте ::
Путь: Математика » Графы и маршруты » Кратчайшие пути » Нахождение k путей - алгоритм Йена
  Нахождение k кратчайших путей в графе



Есть неоpиентиpованный гpаф. Состоит из веpшин и pебеp, pебpам пpиписаны длины. Веpшин несколько тысяч (N штук), количество pебеp известно (M штук). Дополнительных сведений о соотношении числа pебеp и числа веpшин нет.

Hадо найти несколько кpатчайших путей без циклов между двумя заданными точками (K штук путей, K задается, K поpядка нескольких десятков)


  Алгоpитм Йена



Позволяет находить k-кратчайшие пути без циклов последовательно.

Этот алгоритм предполагает, что мы умеем находить один кратчайший путь в графе.

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

Далее находим следующий самый короткий путь аналогично. При нахождении каждого самого короткого пути в список кандидатов добавляется не более N новых путей (на самом деле конечно меньше).

При удалении ребра нахождение кратчайшего пути в полученном графе производится вроде за линейное время. Для этого в исходном графе алгоритм Дейкстры запускается как от начальной, так и от конечной вершины. При удалении одного ребра кратчайший путь в новом графе ищется с использованием деревьев, полученных для исходного графа.


  Модификация алгоpитма Йена.



За счет того, что граф не ориентирован, при нахождении каждого самого короткого пути в список кандидатов добавляется максимум три новых пути.