Bellman-Ford

来源:互联网 发布:mac 更新java版本 编辑:程序博客网 时间:2024/05/21 10:51
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#define inf 999999999 #define MAX 10000using namespace std;int dist[MAX],u[MAX],v[MAX],w[MAX];int main(){int n,m;int check,flag;scanf("%d%d",&n,&m);//n个点,m条边 for(int i=1;i<=m;i++)scanf("%d%d%d",&u[i],&v[i],&w[i]);for(int i=1;i<=n;i++)dist[i]=inf;dist[1]=0;//Bellman-Ford算法核心语句for(int i=1;i<=n-1;i++) {check=0;//标记在本轮松弛中数组dist是否会发生更新 for(int j=1;j<=m;j++){if(dist[v[j]]>dist[u[j]]+w[j]){dist[v[j]]=dist[u[j]]+w[j];check=1;}}if(check==0)break;//如果数组dist未更新,退出循环 }//检测负权回路flag=0;for(int i=1;i<=n;i++)if(dist[v[i]]>dist[u[i]]+w[i])flag=1;if(flag==1){printf("此图含有负权回路\n");return 0;}for(int i=1;i<=n;i++)printf("%d ",dist[i]);return 0;}//测试数据如下 /*5 52 3 21 2 -31 5 54 5 23 4 30 -3 -1 2 4*//*5 71 2 21 5 102 3 32 5 73 4 44 5 55 3 60 2 5 9 9*/


Bellman-Ford的队列优化:http://blog.csdn.net/wzw1376124061/article/details/52557470

0 0
原创粉丝点击