在Dijkstra的wiki page,我被告知如果目的地已知,我可以在trunc
行后终止搜索。我不明白这一点,如何在13
行后终止搜索?
13
答案 0 :(得分:1)
维基百科错了,该算法中的右行是16
。编辑可能破坏了行号或它们下面的段落。
该段落的含义是,如果您只对从顶点S到Q的最短路径感兴趣,那么当找到Q时您可以安全地离开循环,因为任何其他路径都会有更高的成本达到它。伪代码遵循
8 for each vertex v in Graph: // Initialization
9 if v ≠ source: // v has not yet been removed from Q (unvisited nodes)
10 dist[v] ← INFINITY // Unknown distance from source to v
11 prev[v] ← UNDEFINED // Previous node in optimal path from source
12 add v to Q // All nodes initially in Q (unvisited nodes)
13
14 while Q is not empty:
15 u ← vertex in Q with min dist[u] // Source node in the first case
16 remove u from Q
17
(extra) if u == destination_point then break loop
当您遇到终点Q时,您可以安全地跳过更新部分,您可以使用最短路径更新任何相邻顶点以获取它 - >你已经找到了你的目的地。要重建路径,只需将向量prev
从destination_point
反向移动到源。
更多详细信息和C ++示例here