Bellman_Ford算法

Bellman_Ford算法也是单源最短路径算法中的一种,不同于一般Dijkstra算法的是,它可以
解决带负权图的最短路问题,不过该算法的时间复杂度较高,O(nm),n为顶点的个数,m为边的个数

算法的主要思路:

for(int i = 0 ; i

第一层循环的意思,经过不超过k条边,得到的图中所有点的最短距离
第二层循环类似于之前的Dijkstra算法,用当前点来更新最短距离,这步操作叫做松弛

注意1

在第二层循环之前,需要对dist做一个备份backup,目的是为了防止上一次的距离更新对
这次的更新造成影响,从而得到错误的结果

注意2

图中可能存在负权回路,但只要该负权回路的位置不在答案的那条路径上,那么它对结果
没有影响,否则,可能得出负无穷的结果(在负权回路上迭代”无穷次“)。

你可能感兴趣的:(Bellman_Ford算法)