就是两两之间的路径不超过7.因为隔六个人,就是七条边,用Floyd。
代码:
#include<iostream>
using namespace std;
int n,dist[105][105];
void Floyd()
{
int i,j,k,temp;
for( k=0; k<n; k++)
for( i=0; i<n; i++)
for( j=0; j<n; j++){
if( dist[i][k]&&dist[j][k]){
temp=dist[i][k]+dist[k][j];
if( dist[i][j]==0)
dist[i][j]=temp;
if( dist[i][j]>temp)
dist[i][j]=temp;
}
}
}
int main()
{
int m,a,b,i,j;
bool flag;
while( scanf("%d%d",&n,&m)!=EOF){
memset(dist,0,sizeof(dist));
while( m--){
scanf("%d%d",&a,&b);
dist[a][b]=dist[b][a]=1;
}
Floyd();
flag=true;
for( i=0; i<n; i++){
for( j=0; j<n; j++){
if( i!=j){
if( dist[i][j]==0||dist[i][j]>7){
flag=false;
break;
}
}
}
}
if( flag)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}