我有一个关于贝尔曼福特算法的问题。我创建了这个程序,当给定图形时,它将输出源节点和所有其他节点之间的最短距离。那部分工作很棒,所以我有这样的输出:
The cost table is:
Destination: 0 1 2
Cost: 0 4 6
因此,例如,我的源和节点2之间的最短距离是6,这很好。但现在我想获得实际的路线,而不仅仅是他们的成本。喜欢而不是只有从s到v的路线上的成本是5,我想像路线是s-> b - > v。是否可以使用Bellman ford或者我错过了部分内容?
非常感谢你。
答案 0 :(得分:1)
有可能。
实现它的一种方法是在构建表格时 - 而不是仅设置价格,而是使用另一个地图:节点 - >节点,让它为parent
- 当您找到更短的路径时,在放松路径 - 也在parent
地图中显示它。
伪代码(来自维基百科):
for i from 1 to size(vertices)-1:
for each edge (u, v) with weight w in edges:
if distance[u] + w < distance[v]:
distance[v] := distance[u] + w
predecessor[v] := u
完成后,只需按照从目标到源的地图来获取实际路径(当然是相反的)。
从地图中拉出路线:
current := target
path := [] //empty list
while current != null:
path.addFirst(current)
current := predecessor[current]