ZOJ1298||POJ1135 Domino Effect

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1298

翻译从百度上找就有

这题坑了我俩多小时,在zoj上提交总是WA,从网上找AC代码看,思路都差不多,但是人家的就AC。。找了半天也没找出来,我叫不断尝试找测试数据,也找不到,自己写了几组和AC代码输出都是一样的,但还是WA。坑死我了。。

然后我看到poj上也有这个题,就想着把我的代码提交到那上,结果返回的竟然是PE,输出格式问题。。。我把AC代码的输出格式粘到我的代码上,结果……zoj、poj都AC 了……早ZOJ给我返回PE我早就AC了……半天没了……

下面是我的代码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 
 5 #define MAX 510
 6 #define INF 1000000003
 7 
 8 int map[MAX][MAX],flag[MAX],dis[MAX];
 9 int n,m;
10 
11 void dijkstra()
12 {
13     int t,i,k,min;
14     t=n;
15     while(t--)
16     {
17         k=0;
18         min=INF-10;
19         for(i=1;i<=n;i++)
20         {
21             if(!flag[i]&&dis[i]<min)
22             {
23                 min=dis[i];
24                 k=i;
25             }
26         }
27         if(k==0) break;
28         flag[k]=1;
29         for(i=1;i<=n;i++)
30         {
31             if(!flag[i]&&(dis[i]>dis[k]+map[k][i]))
32             {
33                 dis[i]=dis[k]+map[k][i];
34             }
35         }
36     }
37 }
38 int main()
39 {
40     int i,j,u[MAX],v[MAX],w[MAX],k,x,y,t,count=1;
41     double max;
42     while(scanf("%d %d",&n,&m)!=EOF&&(m+n))
43     {
44         for(i=1;i<=n;i++)
45         {
46             for(j=1;j<=n;j++)
47                 map[i][j]=INF;
48             map[i][i]=0;
49             dis[i]=INF;
50         }
51         memset(flag,0,sizeof(flag));
52         for(i=1;i<=m;i++)
53         {
54             scanf("%d%d%d",&u[i],&v[i],&w[i]);
55             map[u[i]][v[i]]=w[i];
56             map[v[i]][u[i]]=w[i];
57         }
58         flag[1]=1;dis[1]=0;
59         for(i=2;i<=n;i++)
60         {
61             dis[i]=map[1][i];
62         }
63         dijkstra();
64         max=0;k=1;
65         for(i=2;i<=n;i++)
66         {
67             if(dis[i]>max)
68             {
69                 max=dis[i];
70                 k=i;
71             }
72         }
73         x=y=0;
74         for(i=1;i<=m;i++)
75         {
76             if((dis[u[i]]+dis[v[i]]+w[i])/2.0-max>0.000000001)
77             {
78                 max=(dis[u[i]]+dis[v[i]]+w[i])/2.0;
79                 x=u[i];
80                 y=v[i];
81             }
82         }
83         printf("System #%d\n",count++);
84         if( x+y )
85         {
86             if(x>y) {t=x;x=y;y=t;}
87             printf("The last domino falls after %.1lf seconds, between key dominoes %d and %d.\n",max,x,y);
88         }
89         else
90         {
91             printf("The last domino falls after %.1lf seconds, at key domino %d.\n",max,k);
92         }
93         printf("\n");
94     }
95     return 0;
96 }

 

posted @ 2014-01-23 12:05  hjf007  阅读(162)  评论(0编辑  收藏  举报