所以我最近一直在使用Dijkstra的算法和指导图。但是,我似乎无法弄清楚这一点,它真的开始打扰我了。
展示如何修改Dijkstra算法以解决单一来源最短的问题 路径问题,如果只有一个负权重边但没有负数 体重周期。
到目前为止,我最初的想法是以某种方式拆分图表并单独执行算法,但这就是我所想到的。
我实际上找到了我正在寻找的解释,但我似乎无法遵循his explanation
好的回答!我想指出,如果负边缘的数量有限,那么基于Dijkstra的算法可能会做得更好。例如,如果从u到v只有一个负边,你可以在s和v上运行Dijkstra,然后在
d[s]
和d[s]+w(u, v)+d[v]
之间的每个顶点取最小值,给出一个复杂性两次跑Dijkstra
答案 0 :(得分:3)
Remove the negative edge (u, v)
, run Dijkstra twice: once starting at s
(D1
) and once starting at v
(D2
)
The shortest path between s
and t
is: min(D1[t], D1[u]+D2[t]+w(u, v))
.