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 }