Если вы хотите найти только один другой путь равной стоимости
Предположим, вы уже один раз запускали алгоритм Дейкстры, чтобы получить кратчайший путь P
.Вы можете добавить крошечную стоимость epsilon
к каждому ребру в P
и запустить Дейкстру во второй раз на измененном графике, чтобы получить новый путь P'
.Если P
и P'
содержат одинаковые ребра, вы можете сделать вывод, что P
- это уникальный кратчайший путь.В противном случае мы отменяем изменение epsilon
и сравниваем длины P
и P'
.Если длины равны, то ясно, что P'
- это другой отличный кратчайший путь.В противном случае P
является уникальным кратчайшим путем.
Если мы хотим найти все кратчайшие пути
Такой алгоритм обязательно будет экспоненциально-временным.Это связано с тем, что граф может иметь экспоненциально много путей одинаковой стоимости между двумя узлами.Например, рассмотрим график:
A --> B1 --> C --> D1 --> E ...
\ -> \ ->
-> B2 / -> D2 /
Существует 4 пути от A
до E
, и если мы предположим, что все ребра имеют одинаковую стоимость, то все эти пути имеют одинаковую общую стоимость.Повторяя этот шаблон, мы можем получить экспоненциально множество путей одинаковой стоимости.