分类
Level8

Bellman-Ford算法

Bellman-Ford 算法 给定一张有向图,若对于图中的某一条边(x,y,z),有 dist[y]≤dist[x]+z成立,则称该边满足三角形不等式。若所有边都满足三角形不等式,则 dist 数组就是所求最短路。

Bellman-Ford 算法的执行过程 很简单,就是对边集合进行 N – 1 轮迭代松弛,每一轮执行m次(边集合的大小为 m)操作。具体流程如下:
1.扫描所有边(x,y,z),若 dist[y]>dist[x]+z ,则用 dist[x]+z 更新 dist[y]。
2.重复上述步骤,直到没有更新操作发生。经过k次循环,求出的dist数组代表了:从1号点出发,在经过不超过k条边的情况下,到每个点的最短路。

性能分析 Bellman-Ford 算法中共存在 n 次对边集合的迭代松弛,边集合的大小为 m ,所以Bellman-Ford 算法的时间复杂度为 O(n*m)。