FLOYD,直接认识的两个人距离设为1,判断是否存在两个人之间的最短距离大于7的情况。
#include <cstdio>
#include <cstdlib>
#include <cstring>
void work(int n,int m)
{
int f[105][105];
int i,j,k,x,y,flag;
memset(f,0x3F,sizeof(f));
for(i=0;i<=n;i++) f[i][i]=0;
while(m--)
{
scanf("%d%d",&x,&y);
f[x][y]=f[y][x]=1;
}
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(f[i][j]>f[i][k]+f[k][j])
f[i][j]=f[i][k]+f[k][j];
flag=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(f[i][j]>7)
{
flag=0;
break;
}
printf(flag?"Yes\n":"No\n");
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
work(n,m);
}