Это может быть слишком поздно, но Никто не предоставил четкое объяснение того, как работает алгоритм
Идея Дейкстрой проста, дай мне покажите это со следующим псевдокодом.
Dijkstra разбивает все узлы на два разных множества. Неустроенный и устоявшийся. Первоначально все узлы находятся в неустановленном наборе, например. они должны быть все еще оценены.
Сначала только исходный узел помещается в набор разрешенныхNodes. Конкретный узел будет перемещен в установленный набор, если будет найден самый короткий путь от источника к определенному узлу.
Алгоритм работает до тех пор, пока набор unsettledNodes не будет пустым. На каждой итерации он выбирает узел с наименьшим расстоянием до исходного узла из набора unsettledNodes. Например. Он считывает все ребра, исходящие из источника, и оценивает каждый узел назначения из этих ребер, которые еще не установлены.
Если известное расстояние от источника до этого узла может быть уменьшено при использовании выбранного края, расстояние обновляется, а узел добавляется к узлам, которые нуждаются в оценке.
Обратите внимание, что Dijkstra также определяет пре-преемника каждого узла на своем пути к источнику. Я оставил это из псевдокода, чтобы упростить его.
Кредиты Lars Vogel
Нет причин не использовать алгоритм Дейкстры здесь. Он находит кратчайшее расстояние между начальной точкой и всеми пунктами назначения, затем вы просто выбираете пункт назначения, который вы хотите, из завершенного списка или карты результатов. – SplinterReality
Я думаю, что есть причина не использовать Дийкстра в этом случае. Дийкстра хорош для вычисления расстояния от начальной точки до всех узлов на карте. Если вам нужно только расстояние до одной точки, A * быстрее. Это в основном тот же алгоритм, что A * не расширяет нежелательные узлы. Как Dijkstra, так и A * могут быть реализованы с использованием кучи Fibonacci (если вы заботитесь о производительности) и будут выглядеть очень похожими в коде. Конечно, вам нужна эвристика для A *. Если у вас его нет, тогда Дийкстра очень хороша. – phoenix7360
Я не упомянул об эвристическом методе просто потому, что это не относится к такой маленькой проблеме. Если мы посмотрим, как ехать из Нью-Йорка в Калифорнию, Дейкстра - это плохой выбор по очевидным причинам, но в этом случае: «Нет оснований не использовать алгоритм Дейкстры здесь». – SplinterReality