【发布时间】:2020-02-13 02:54:47
【问题描述】:
我想实现 dijkstra 算法以在图中两个节点之间找到最便宜的路径。权重是节点之间的 X,Y 距离。我了解如何实现 dijkstra,但我需要找到所有最短的路径。因此,如果 2 条路径的长度相同,我想要它们。
我也在 Google 和 Stack Overflow 上到处寻找。但我无法真正理解给出的一些答案。也没有人使用优先队列。我正在考虑标记我们已经访问过的节点,但这不会切断路径吗?
这是我要实现的Wikipedia的伪代码。
1 function Dijkstra(Graph, source):
2 dist[source] ← 0 // Initialization
3
4 create vertex priority queue Q
5
6 for each vertex v in Graph:
7 if v ≠ source
8 dist[v] ← INFINITY // Unknown distance from source to v
9 prev[v] ← UNDEFINED // Predecessor of v
10
11 Q.add_with_priority(v, dist[v])
12
13
14 while Q is not empty: // The main loop
15 u ← Q.extract_min() // Remove and return best vertex
16 for each neighbor v of u: // only v that are still in Q
17 alt ← dist[u] + length(u, v)
18 if alt < dist[v]
19 dist[v] ← alt
20 prev[v] ← u
21 Q.decrease_priority(v, alt)
22
23 return dist, prev
如果有人有任何建议,或者如果优先队列不可行,请告诉我。谢谢。
【问题讨论】:
-
你的问题是“这个伪代码是如何工作的”还是“我如何将它翻译成 c++”?
-
我的问题是“我如何扩展这个伪代码以便我可以在 C++ 中实现它”
标签: c++ algorithm shortest-path dijkstra