Dijkstra的算法不生成最短路径?

时间:2012-04-20 22:52:38

标签: algorithm graph-theory shortest-path dijkstra

我正在使用Dijkstra算法解决最短路径问题。我遇到了麻烦,因为算法应该提供最短的路径,但在运行算法后,我手动获得了一个短路径。这只是该算法的副产品吗?

我尝试生成的路径来自 - > ž

unmarked graph

以下是我应用算法得到的路径,在我访问的每个顶点进行最短距离跳转:

  2    4    2    2    1    2    1    1    8      = 23
a -> d -> g -> k -> r -> n -> q -> p -> t -> z

Marked Graph

这让我感到困惑,因为如果我采取这条道路:

  4    2    2    2    2    2    2     = 16
a -> c -> f -> i -> m -> p -> s -> z

我得到的距离比算法生成的距离小5。

我在某处错过了吗?

1 个答案:

答案 0 :(得分:3)

看起来你误解了Dijkstra的算法是如何工作的。您不必考虑每个节点上最小权重的边缘,而是始终需要考虑从开头到节点的总距离(节点$ a $)。您保留了所有可能路径的堆,这些路径仅作为没有边的起始节点开始,并通过添加所有路径来扩展,每个路径都添加到您正在考虑的每个步骤的路径中。 / p>

这是一堆混乱的词汇,试图总结你哪里出错了。我建议重新阅读Dijkstra算法的工作原理:http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm