最短路径距离->如何处理负重量?

时间:2018-12-03 18:06:22

标签: algorithm path shortest

我有顶点V = {s,u,v,x}以及边E = {(s,u),(s,x),(s,v),(u,v),(v ,x),(x,u))以及以下权重:

W(s, u) = 1
W(v, x) = W(x, u) = W(s, v)=2
W(u, v) = -3
W(s, x) = -1 

现在我正在执行Initialize(G,w,s),以s为起点,并初始化s.d = 0。 我需要u,v,x的最短路径距离。由于它们都连接到s,因此我可以只使用W(s,u),W(s,v),W(s,x)的权重。但是x.d为-1。那甚至适用吗?我现在可以使用这个距离来正确执行Relax(s,x,w)并获得正确的输出吗?

预先感谢

1 个答案:

答案 0 :(得分:0)

正如Dijkstra's algorithm with negative weights所说,只要没有负周期,Bellman-Ford就会收敛。如果出现负周期,它将检测到该事实。

如果存在负周期,则没有解决方案,只能将从A到B的成本与沿途访问的负边缘集配对,以便您可以找出它们,而不必再次进行访问。从理论上讲这是正确的,但是在内存和运行时间上都很昂贵。