在这个网络中,使用Dijkstra的最短路径算法。问题是A将使用哪条路径到达D,因为它们都相等?
那个表缺失了吗?
在这个网络中,使用Dijkstra的最短路径算法。问题是A将使用哪条路径到达D,因为它们都相等?
那个表缺失了吗?
这取决于您的实际实现方式以及输入图的描述方式(例如,边可以按不同顺序排列,如果有许多边,则会对结果产生影响)。
但是,保证它将找到某条具有最优长度的路径。
您的表格在E和F顶点处似乎有误。E的父顶点是D(AB->BD->DE = 3 + 4 + 2 = 9),F也是如此。
if alt < dist[v]
”,因此在此情况下(以及我所见到的所有实现中),从 A
到 D
的最短路径是 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 的父节点,因为新路径不比当前路径更好。如果松弛算法使用的是“小于或等于”的比较方式,那么结果将会不同。