简单的图,就是传递闭包,直接floyd求各边最短路,只要每条边不大于7就 符合“六度分离”理论
#include<stdio.h>
int map[202][202];
void floyd (int n)
{
int i, j, k ;
for (k = 0 ; k < n ; ++k)
for (i = 0 ; i < n ; ++i)
for (j = 0 ; j < n ; ++j)
if ( map[i][j] > map[i][k] + map[k][j])
map[i][j] = map[i][k] + map[k][j];
}
int main ()
{
int n,m,i,k,x,y,f;
while(scanf("%d%d",&n,&m)!=EOF)
{
for(i=0;i<=n;i++)
for(k=0;k<=n;k++)
map[i][k]=10000;
for(i=0;i<m;i++)
{
scanf("%d%d",&x,&y);
map[x][y]=map[y][x]=1;
}
floyd(n);
f=0;
for(i=0;i<n;i++)
for(k=i+1;k<n;k++)
{
if(map[i][k]>7)
{
f=1;
goto xx;
}
}
xx:
if(f)
printf("No\n");
else
puts("Yes");
}
return 0;
}