Bellman-Ford
求最短路径问题中,当边的权重为负数既负权边出现的时候就要用到这种算法.
例给出n个顶点,m个边,来求0号城市到其他城市的最短距离.城市编号从0开始.
输入方法:第一行输入n m.随后m行输入a b c表示一条边城市a到b权重为c.
输出0城市到所有城市的距离
代码实现
#include<stdio.h>
int main()
{
int n,m,inf=99999;
scanf("%d%d",&n,&m);
int dis[n],a[m],b[m],c[m];
dis[0]=0;
for(int i=1;i<n;i++){
dis[i]=inf;
}
for(int i=0;i<m;i++){
scanf("%d%d%d",&a[i],&b[i],&c[i]);
}
for(int i=0;i<n-1;i++){
for(int j=0;j<m;j++){
if(dis[b[j]]>dis[a[j]]+c[j]){
dis[b[j]]=dis[a[j]]+c[j];
}
}
}
for(int i=0;i<n;i++){
printf("%d ",dis[i]);
}
return 0;
}
测试用例
5 5
1 2 2
0 1 -3
0 4 5
3 4 2
2 3 3
结果