题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1869
解题思路:本题为简单最短路,只需要求出两两间的距离,如果存在一个两两间距离大于7的点的话则输出No如果两两间的距离都小于或等于7则输出Yes
#include<stdio.h>
#define INF (1<<20)
#define maxn 105
int map[maxn][maxn],n,m;
void floyd()
{
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 i,j,a,b;
while(scanf("%d%d",&n,&m)!= EOF)
{
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
map[i][j] = (i == j ? 0 : INF);
while(m--)
{
scanf("%d%d",&a,&b);
map[a][b] = map[b][a] = 1;
}
floyd();
int flg = 1;
for(i = 0; i < n && flg; i++)
{
for(j = 0; j < n && flg; j++)
if(map[i][j] > 7)
flg = 0;
}
if(flg)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}