Bellman-Ford---解决负权边

#include<stdio.h>
int main()
{
    int dis[100],u[100],v[100],w[100],i,j,n,m;
    int inf=99999999;     //用inf存储我们认为的正无穷大的数
    //输入n和m,n表示顶点数,m表示边数
    scanf("%d%d",&n,&m);
    //输入边
    for(i=1; i<=m; i++)
        scanf("%d%d%d",&u[i],&v[i],&w[i]);
    //初始化dis[i]
    for(i=1; i<=n; i++)
        dis[i]=inf;
    dis[1]=0;
    for(j=1; j<n; j++)//必须要执行n-1次循环
        for(i=1; i<=m; i++)
            if(dis[v[i]]>dis[u[i]]+w[i])
                dis[v[i]]=dis[u[i]]+w[i];
    //检测负权回路
    int flag=0;
    for(i=1; i<=n; i++)


    {
        if(dis[v[i]]>dis[u[i]]+w[i])
            flag=1;
        if(flag==0)
            printf("此图存在负权回路\n");
        else
        {
            //输出最终的结果
            for(i=1; i<=n; i++)
                printf("%d ",dis[i]);
        }
    }
    return 0;
}
/*
5 5
2 3 2
1 2 -3
1 5 5
4 5 2
3 4 3
最终结果
0 -3 -1 2 4
*/

    原文作者:Bellman - ford算法
    原文地址: https://blog.csdn.net/baidu_34872357/article/details/51470085
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞