【发布时间】:2013-07-03 00:48:40
【问题描述】:
我需要一种算法来找到地图中两点之间的最短路径 其中道路距离用数字表示。
给出的内容: 开始城市 A 目的地城市Z
城市之间的距离列表:
A - B:10
F - K : 23
R - M : 8
K - O : 40
Z - P : 18
J - K : 25
D - B : 11
M - A : 8
P - R : 15
我以为我可以使用 Dijkstra 的算法,但是它找到了到所有目的地的最短距离。不止一个。
欢迎提出任何建议。
【问题讨论】:
-
这里没有理由不使用 Dijkstra 算法。它会找到起点和所有目的地之间的最短距离,然后您只需从完成的列表或结果地图中选择您想要的目的地。
-
我认为在这种情况下不使用 Dijkstra 是有原因的。 Dijkstra 可以很好地计算从起点到地图中所有节点的距离。如果您只想要到一点的距离,A* 更快。基本上相同的算法期望 A* 不会扩展不需要的节点。 Dijkstra 和 A* 都可以使用 Fibonacci 堆(如果您关心性能)来实现,并且在代码中看起来非常相似。当然,您需要 A* 的启发式方法。如果您没有,那么 Dijkstra 确实非常好。
-
我没有提到启发式方法只是因为它与这样一个小问题无关。如果我们正在研究如何从纽约开车到加利福尼亚,出于不言而喻的原因,Dijkstra 是一个糟糕的选择,但在这种情况下,“没有理由不在这里使用 Dijkstra 的算法。”
-
是的。对于这个特殊的小案例,这并不重要。我不确定该问题是否仅针对此特定示例还是针对更一般性的讨论