Позвольте мне остановиться на Ответ Томаса .
Если вы посмотрите на реализацию Dijkstra, такую как этот пример: http://graphonline.ru/en/?graph=NnnNwZKjpjeyFnwx, вы увидите график, подобный этому
В примере графика 0 → 1 → 5, 0 → 2 → 5, 0 → 3 → 5 и 0 → 4 → 5 одинаковой длины. Чтобы найти «кратчайший путь» не обязательно уникален, о чем свидетельствует эта диаграмма.
Используя формулировку в Википедии , в какой-то момент алгоритм инструктирует нас:
выберите не посещаемый узел, который помечен с наименьшим предварительным расстоянием .
Проблема здесь заключается в слове , что предполагает его уникальность. А может и не быть. Для реализации, чтобы фактически выбрать один узел из множества равных кандидатов, требуется дополнительная спецификация алгоритма относительно того, как его выбрать. Но любой такой выбранный кандидат, имеющий требуемое свойство, будет определять путь наименьшей длины. Таким образом, алгоритм не фиксирует. Современный подход к формулировке этого алгоритма заключается в следующем:
выберите любой не посещенный узел, который отмечен наименьшим предварительным расстоянием .
С точки зрения алгоритма математической теории графов этот алгоритм технически будет обрабатывать всех таких кандидатов одновременно в виде мультиверса. Все ответы, которые он может получить, одинаково действительны. И когда доказательство того, что алгоритм работает, мы докажем его для всех таких кандидатов во всех мультиверсах и покажем, что все варианты выбора находятся на пути одинакового расстояния, и что это расстояние является наименьшим возможным расстоянием.
Тогда, если вы хотите использовать алгоритм, чтобы просто вычислить один такой ответ, потому что вы хотите либо A) найти один такой путь, либо B) определить расстояние такого пути, то он остается на ваше усмотрение выбрать одну указанную c ветвь мультивселенной для исследования. Все такие выборки, сделанные в соответствии с определенным алгоритмом, дадут путь, длина которого является наименьшей возможной длиной. Вы можете определить любые дополнительные неконфликтующие критерии, которые вы сделаете sh, чтобы сделать такой выбор.
Причина, по которой я связал реализацию, является детерминированной c и всегда дает один и тот же ответ (очевидно, для одинаковых начального и конечного узлов), потому что сами узлы упорядочены в компьютере. Эта дополнительная информация о порядке узлов не рассматривается для теории графов. Узлы часто помечены, но не обязательно упорядочены. В реализации компьютер полагается на тот факт, что узлы появляются в упорядоченном массиве узлов в памяти, и реализация использует этот порядок для разрешения связей. Возможно, выбрав узел с самым низким индексом в массиве, то есть «первым» кандидатом.
Если реализация разрешает связи путем случайного (не псевдослучайного!) Выбора победителя из равных кандидатов, то это * не быть детерминированным c.
Алгоритм Дейкстры, описанный в Википедии, просто определяет алгоритм для поиска кратчайших путей (обратите внимание на множественное число путей ) между узлами. Любой такой путь, который он находит (если он существует), гарантированно будет иметь кратчайшее возможное расстояние. Вам по-прежнему остается задача выбора между эквивалентными кандидатами на шаге 6 в алгоритме.