图最短路径无限循环

时间:2015-06-20 14:43:19

标签: graph dijkstra shortest-path

enter image description here

所以我的绘画技巧不是最好的,但我认为它很好地展示了这个例子。想象一下,我想计算A和C之间的最短路径,考虑到我发现的所有算法都是贪婪的,不会被卡在A和B之间的无限循环中吗?

任何sugestions?

提前致谢

2 个答案:

答案 0 :(得分:2)

不,不应该是一个无限循环。

图表中的已访问和未访问的节点将被跟踪,并且永远不会再访问受访节点。

在你的例子中:

  1. 将所有节点标记为未访问的节点,但访问的起始节点
  2. 除外
  3. 从A开始,访问B,将B标记为已访问
  4. B只能访问A或C,但A已被标记为已访问
  5. 唯一可用的节点是C,未访问的

答案 1 :(得分:0)

我通常从起点向每个节点放入距离和路径(节点列表)。当我进入节点时,我将当前距离与现有距离进行比较。如果当前距离比现有距离短,我用旧路径替换新路径。

另一种方法是将每个节点的距离列表保存到每个其他节点。离开每个节点时填写此列表。

从A开始:设置A已访问过。转到B.然后回到A. A已经访问过,所以在B处添加B到A的距离为26。 从B移动到D.然后回到B. B已经访问过,所以在D处将距离D添加到B为96.从D加到A的距离为96 + 26 = 112。 从D移动到E.然后返回D. D已经访问过,所以在E处将距离E添加到D为21.将距离E添加到B为21 + 96 = 117.将距离E添加到A为21 + 96 + 26 = 143。