我想计算此图
中从A到F的最短路径按照Dijkstra的算法,我到达E然后转到C,但是我不能回到E,我该如何解决?
我的步骤是:
答案 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是最新的,这意味着我们已经完成了。