#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
int num_dot,num_side,iq[110],weight[110],dis[110][110];
void init()
{
int i,t1,t2;
memset(dis,127,sizeof(dis));
for(i=0;i<num_side;i++)
{
scanf("%d%d",&t1,&t2);
dis[t1][t2]=1;
dis[t2][t1]=1;
}
}
void spfa(int st)
{
int x,i;
queue<int>qq;
memset(iq,0,sizeof(iq));
memset(weight,127,sizeof(weight));
iq[st]=1;
qq.push(st);
weight[st]=0;
while(qq.size())
{
x=qq.front();
qq.pop();
iq[x]=0;
for(i=0;i<num_dot;i++)
if(weight[i]>weight[x]+dis[x][i])
{
weight[i]=weight[x]+dis[x][i];
if(!iq[i])
{
qq.push(i);
iq[i]=1;
}
}
}
}
bool isright()
{
int i,j;
for(i=0;i<num_dot;i++)
{
spfa(i);
for(j=i+1;j<num_dot;j++)
if(weight[j]>7)
return 0;
}
return 1;
}
int main()
{
while(scanf("%d%d",&num_dot,&num_side)!=EOF)
{init();
if(isright())
printf("Yes\n");
else
printf("No\n");}
}hdu1869六度分离,spfa实现求最短路,布布扣,bubuko.com
原文地址:http://blog.csdn.net/stl112514/article/details/37603293