Bellman-Ford算法

http://poj.org/problem?id=1364

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define maxn 105
 4 #define INF 999999999
 5 typedef struct
 6 {
 7     int u,v,w;
 8 }node;
 9 node a[maxn];
10 int n,m,cnt;
11 int dist[maxn];
12 void add(int u,int v,int w)
13 {
14     a[cnt].u=u;
15     a[cnt].v=v;
16     a[cnt].w=w;
17     cnt++;
18 }
19 int bellman_ford()
20 {
21     for(int i=1;i<=n;i++)
22         dist[i]=INF;
23     dist[0]=0;
24     for(int i=1;i<=n;i++)
25     {
26         for(int j=0;j<cnt;j++)
27             if(dist[a[j].v]>dist[a[j].u]+a[j].w)
28               dist[a[j].v]=dist[a[j].u]+a[j].w;
29     }
30     for(int j=0;j<cnt;j++)
31         if(dist[a[j].v]>dist[a[j].u]+a[j].w)
32           return 0;
33     return 1;
34 }
35 int main()
36 {
37     while(scanf("%d",&n)!=EOF)
38     {
39         if(n==0)  break;
40         scanf("%d",&m);
41         cnt=0;
42         while(m--)
43         {
44             int si,ni,ki;
45             char ch[2];
46             scanf("%d%d%s%d",&si,&ni,ch,&ki);
47             if(ch[0]=='g')
48                 add(si+ni,si-1,-ki-1);
49             else
50                 add(si-1,si+ni,ki-1);
51         }
52         if(bellman_ford())
53             printf("lamentable kingdom
");
54         else
55             printf("successful conspiracy
");
56 //        for(int i=0;i<cnt;i++)
57 //            printf("%d %d %d
",a[i].u,a[i].v,a[i].w);
58     }
59     return 0;
60 }
原文地址:https://www.cnblogs.com/lyf123456/p/3687169.html