美文网首页算法
Bellman_Ford算法

Bellman_Ford算法

作者: _NewMoon | 来源:发表于2019-09-28 23:41 被阅读0次

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

    算法的主要思路:

    for(int i = 0 ; i<k ;i++)
        {
            memcpy(backup,dist,sizeof dist);
            
            for(int j = 0; j<m ;j++)
            {
                int a = edge[j].a, b = edge[j].b, w = edge[j].w;
                dist[b] = min(dist[b],backup[a] + w);  //松弛操作
            }
        }
    

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

    注意1

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

    注意2

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

    相关文章

      网友评论

        本文标题:Bellman_Ford算法

        本文链接:https://www.haomeiwen.com/subject/axfxpctx.html