思路:最短路+floyd
分析:
1 题目是要求所有的数据能否满足“六度分离”,那么我们就想到所有点之间的最短距离。
2 应用floyd,如果两点之间有联系那么距离标记为1,那么最后只要判断是不是每两个人之间的距离是不是都不大于7(这里为什么是7不是6自己画图).
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define MAXN 110
#define INF 0xFFFFFFF
int n , m;
int dis[MAXN][MAXN];
void init(){
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < n ; j++)
dis[i][j] = INF;
dis[i][i] = 0;
}
}
int min(int a , int b){
return a < b ? a : b;
}
void floyd(){
for(int k = 0 ; k < n ; k++){
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < n ; j++)
dis[i][j] = min(dis[i][j] , dis[i][k]+dis[k][j]);
}
}
}
int main(){
int a , b , flag;
while(scanf("%d%d" , &n , &m) != EOF){
init();
for(int i = 0 ; i < m ; i++){
scanf("%d%d" , &a , &b);
dis[a][b] = dis[b][a] = 1;
}
floyd();
flag = 1;
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < n ; j++){
if(dis[i][j] > 7){
flag = 0;
break;
}
}
if(!flag)
break;
}
if(flag)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}