hdu 1869 六度分离

时间:2022-11-11 03:51:08

floyd 点对点的路径

两个人如果认识 则记为1 两个人之间的路径超过7,则为no

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define INF 9999999
 4 int d[1000][1000];
 5 int v,e;
 6 void init()
 7 {
 8     int i,j;
 9     for(i = 0; i < v; i++)
10         for(j = 0; j < v; j++)
11         if(i == j) d[i][j] = 0;
12         else d[i][j] = INF;
13 }
14 int floyd()
15 {
16     int i,j,k,cnt;
17     for(k = 0;k < v; k++)
18         for(i = 0 ;i < v; i++)
19             for(j = 0;j < v;j++)
20             {
21                 cnt = d[i][k] + d[k][j];
22                 if(cnt < d[i][j])
23                 {
24                     d[i][j]=cnt;//киЁз
25                 }
26             }
27     for(i = 0 ; i < v; i++)
28         for(j = 0;j < v;j++)
29             if(d[i][j] > 7)return 0;
30     return 1;
31 }
32 
33 int main()
34 {
35     int i,j,u,w;
36     while(scanf("%d%d",&v,&e)!=EOF)
37     {
38         init();
39         for(i = 0; i < e; i++)
40         {
41             scanf("%d%d",&u,&w);
42             d[u][w] = d[w][u] = 1;
43         }
44         if(floyd())printf("Yes\n");
45         else printf("No\n");
46     }
47     return 0;
48 }