#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---解决负权边
原文作者:Bellman - ford算法
原文地址: https://blog.csdn.net/baidu_34872357/article/details/51470085
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/baidu_34872357/article/details/51470085
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。