题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1869
将每个人看作一个点,问题转化为图,求任意两点之间的距离,距离大于7不符合要求(间隔6个人)
#include <stdio.h>
#include <string.h>
#define INF 99999
int main()
{
int n,m,i,j,k,flag;
int map[102][102];
while(scanf("%d %d",&n,&m)!=EOF)
{
flag=0;
for (i=0;i<n;++i)
{
for(j=0;j<n;++j)
map[i][j]=INF;
map[i][j]=0;
}
for (k=0;k<m;++k)
{
scanf("%d %d",&i,&j);
map[i][j]=1;
map[j][i]=1;
}
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];
}
for (i=0;i<n;++i)
{
for(j=0;j<i;++j)
if(map[i][j]>7)
{
flag=1;
break;
}
}
if(flag==1)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}