HDU 1869 六度分离(Floyd)

题目链接

裸的弗洛伊德,没想清楚判断是否是6度分离,WA了一次,还好仔细分析了代码+思考10多分钟后找到问题,2Y。。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 1000000
 4 int p[301][301];
 5 int main()
 6 {
 7     int sv,ev,i,j,k,n,m,z;
 8     while(scanf("%d%d",&n,&m)!=EOF)
 9     {
10         for(i = 0; i <= n-1; i ++)
11             for(j = 0; j <= n-1; j ++)
12             {
13                 if(i != j)
14                     p[i][j] = N;
15                 else
16                     p[i][j] = 0;
17             }
18         for(i = 1; i <= m; i ++)
19         {
20             scanf("%d%d",&sv,&ev);
21             p[sv][ev] = 1;
22             p[ev][sv] = 1;
23         }
24         for(k = 0; k <= n-1; k ++)
25             for(i = 0; i <= n-1; i ++)
26                 for(j = 0; j <= n-1; j ++)
27                 {
28                     if(p[i][j] > p[i][k] + p[k][j])
29                         p[i][j] = p[i][k] + p[k][j];
30                 }
31         z = 0;
32         for(i = 0;i <= n-1;i ++)
33         {
34            for(j = 0;j <= i;j ++)
35            {
36                if(p[i][j] > 7)
37                {
38                    z = 1;
39                    break;
40                }
41            }
42         }
43         if(!z)
44         printf("Yes\n");
45         else
46         printf("No\n");
47     }
48     return 0;
49 }
posted @ 2012-06-20 19:22  Naix_x  阅读(205)  评论(0)    收藏  举报