在这个网络中,使用Dijkstra的最短路径算法。 问题是A将使用哪条路径来达到D,因为两者是平等的?
该表丢失了吗?
答案 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
=节点队列,一对距离,父节点):
A
,以便获得S = {A:0}
和Q = {B:3,A C:5,A D:9,A}
Q
选择B
并放松。您获得S = {A:0 B:3,A}
和Q = {C:(5,A) D:7,B E:10,B}
Q
选择C
并放松。获得S = {A:0 B:3,A C:5,A}
和Q = {D:7,B E:10,B}
。Q
选择D
,即可完成算法。请注意,在步骤3中,您不需要更改D的父级,因为新路径不比当前路径好。如果松弛算法使用less-than-or-equal
比较,则结果将不同。