Dijkstra的最短路径算法如果有相同距离的路径怎么办?

时间:2013-12-22 17:28:44

标签: algorithm dijkstra shortest-path

enter image description here

在这个网络中,使用Dijkstra的最短路径算法。 问题是A将使用哪条路径来达到D,因为两者是平等的?

enter image description here

该表丢失了吗?

2 个答案:

答案 0 :(得分:2)

这取决于您的实际实现以及描述输入图形的方式(例如,边缘可以按不同的顺序排列,如果有很多,这将对结果产生影响)。

但是,它保证会找到一些具有最佳长度的路径。

你的桌子在E和F顶点似乎是错误的。 E的父顶点是D(AB-> BD-> DE = 3 + 4 + 2 = 9),F的父顶点也是。

答案 1 :(得分:2)

这取决于放松功能的实现。例如,algorithm described in the wikipedia严格使用less-than比较:if alt < dist[v]所以在这种情况下(以及我见过的所有实现)从A到{{D的最短路径1}}是A -> B -> D

为什么呢?因为(S =已确定的节点和Q =节点队列,一对距离,父节点):

  1. 开始放松A,以便获得S = {A:0}Q = {B:3,A C:5,A D:9,A}
  2. Q选择B并放松。您获得S = {A:0 B:3,A}Q = {C:(5,A) D:7,B E:10,B}
  3. Q选择C并放松。获得S = {A:0 B:3,A C:5,A}Q = {D:7,B E:10,B}
  4. Q选择D,即可完成算法。
  5. 请注意,在步骤3中,您不需要更改D的父级,因为新路径不比当前路径好。如果松弛算法使用less-than-or-equal比较,则结果将不同。