标签:
1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 using namespace std; 5 const int inf=1<<29; 6 const int N=1001; 7 int w[N][N],d[N]; 8 int u,v,c,m,n; 9 struct node 10 { 11 int from; 12 int to; 13 int c; 14 }e[N*N]; 15 bool Bellman_ford(int st) 16 { 17 for(int i=1;i<=n;i++) 18 { 19 d[i]=inf; 20 } 21 d[st]=0; 22 for(int i=1;i<n;i++) 23 { 24 for(int j=0;j<=2*m;j++) 25 { 26 if(d[e[j].to]>d[e[j].from]+e[j].c) 27 d[e[j].to]=d[e[j].from]+e[j].c; 28 } 29 } 30 for(int i=0;i<2*m;i++)//如果持续更新,则抛出错误 31 if(d[e[i].to]>d[e[i].from]+e[i].c) 32 return true; 33 return false; 34 } 35 int main() 36 { 37 while(scanf("%d%d",&n,&m)!=EOF) 38 { 39 for(int i=0;i<2*m;i+=2)//人为付成无向图 40 { 41 scanf("%d%d%d",&e[i].from,&e[i].to,&e[i].c); 42 e[i+1].from=e[i].to; 43 e[i+1].to=e[i].from 44 e[i+1].c=e[i].c; 45 } 46 if(Bellman_ford(1)) 47 printf("-1\n");//并不是能计算负权值,而是能将存在负权值得情况报出出错误 48 else 49 { 50 for(int i=2;i<=n;i++) 51 printf("%d %d\n",i,d[i]); 52 } 53 } 54 return 0; 55 }
标签:
原文地址:http://www.cnblogs.com/tianmin123/p/4775022.html