最短路--Bellman-Ford

假如想象 提交于 2019-12-06 08:34:39

Bellman-Ford

算法思想

枚举n次,每次枚举每一条边,如果dis[u] > dis[v]+w[v][u],则dis[u] = dis[v]+w[v][u],如果图没有负环则最多跑n-1次,否则可以一直跑下去

模板

bool Bellman_Ford(int s)
{
    memset(dis,inf,sizeof dis);
    dis[s] = 0;
    bool flag;
    for(int i = 1; i <= n; i++) //n个点
    {
        flag = false;
        for(int j = 0; j < m; j++) //m条边
        {
            int x = edge[j].u;
            int y = edge[j].v;
            int z = edge[j].w;
            if(dis[y] > dis[x]+z)
            {
                dis[y] = dis[x]+z;
                flag = true;
            }
        }
        if(!flag) break;
        if(i==n && flag) return false;//存在负环
    }
    return true;
}

例题

参考博客

https://www.cnblogs.com/CLAYzhan/articles/11621448.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!