Dijkstra:只能处理正边
- 不适用情况:存在负权边
- 算法步骤:
- 初始化:起点最短路劲为0,其余为无穷大
- 每次从未访问顶点中选择一个路劲值最短的顶点
- 更新与该顶点相连的顶点的最短路劲
- 重复2,3直到所有顶点都访问过
1 | /** |
Bellman-Ford:可以处理负边,但不能处理负环
- 不适用情况:存在负环
- 算法步骤:
- 初始化:起点最短路劲为0,其余为无穷大
- 循环顶点个数-1次:每次循环,遍历所有边,如果终点最短路劲值大于起点最短路劲值+该边权值,则更新终点最短路劲值
1 | /** |
在Bellman-Ford算法中,可以通过一轮额外的松弛操作来检测负环。在进行顶点个数-1轮的基本算法操作后,再进行一轮额外的松弛操作。如果在这轮松弛操作中,仍然存在顶点的最短路径值发生改变,则说明存在负环。因为在没有负环的情况下,进行n-1轮松弛操作可以得到最短路径值,如果仍然存在顶点的最短路径值发生改变,说明存在负环。
- 本文作者: zzr
- 本文链接: http://zzruei.github.io/2023/11a33f222a.html
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!