我正在使用Dijkstra算法解决最短路径问题。我遇到了麻烦,因为算法应该提供最短的路径,但在运行算法后,我手动获得了一个短路径。这只是该算法的副产品吗?
我尝试生成的路径来自 - > ž
以下是我应用算法得到的路径,在我访问的每个顶点进行最短距离跳转:
2 4 2 2 1 2 1 1 8 = 23
a -> d -> g -> k -> r -> n -> q -> p -> t -> z
这让我感到困惑,因为如果我采取这条道路:
4 2 2 2 2 2 2 = 16
a -> c -> f -> i -> m -> p -> s -> z
我得到的距离比算法生成的距离小5。
我在某处错过了吗?
答案 0 :(得分:3)
看起来你误解了Dijkstra的算法是如何工作的。您不必考虑每个节点上最小权重的边缘,而是始终需要考虑从开头到节点的总距离(节点$ a $)。您保留了所有可能路径的堆,这些路径仅作为没有边的起始节点开始,并通过添加所有路径来扩展,每个路径都添加到您正在考虑的每个步骤的路径中。 / p>
这是一堆混乱的词汇,试图总结你哪里出错了。我建议重新阅读Dijkstra算法的工作原理:http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm