图最短路径混淆

时间:2015-06-21 10:00:48

标签: graph dijkstra shortest-path

我想计算此图enter image description here

中从A到F的最短路径

按照Dijkstra的算法,我到达E然后转到C,但是我不能回到E,我该如何解决?

我的步骤是:

  • 所有费用均为无穷大但a,我已设为0。
  • 从A我更新了b和c,考虑到b有26个成本,我去了b。
  • 然后是d,e,最后是c

1 个答案:

答案 0 :(得分:1)

听起来你从目前身处的任何地方走最短路径,而不是计算到达节点的总距离。让我们详细介绍一下。

Dijkstra算法设置了两组节点:访问(已知距离)和未访问(具有暂定距离)。我们从:

开始
visited: { }
unvisited: { a(dist 0), b(dist ∞), c(dist ∞), d(dist ∞), e(dist ∞), f(dist ∞) }

最小的暂定距离变为永久性,该节点是“当前”节点。使用当前节点,我们更新当前节点可以在较短距离内到达的暂定距离,并将当前节点标记为已访问:

visited: { a(0) }
unvisited: { b(26), c(50), d(∞), e(∞), f(∞) }

我们重复上面的段落,使最短暂定距离永久化,并更新当前节点可以在较短距离内到达的暂定距离,并将当前节点标记为已访问:

visited: { a(0), b(26) }
unvisited: { c(50), d(91), e(∞), f(∞) }

再次:

visited: { a(0), b(26), c(50) }
unvisited: { d(91), e(76), f(∞) }

这一次,我们选择e作为当前节点,因为它的暂定距离小于d s。但是d的暂定距离没有得到更新,因为我们已经找到了更好的距离。 Mark e访问过:

visited: { a(0), b(26), c(50), e(76) }
unvisited: { d(91), f(101) }

现在d是最新的,但它不会更新任何距离(我们不需要查看访问过的节点,我们已经找到了最佳距离)。所以我们只是标记它被访问:

visited: { a(0), b(26), c(50), e(76), d(91) }
unvisited: { f(101) }

现在f是最新的,这意味着我们已经完成了。