这道题的背景是以著名的六度定理为依托,现在的SNS网站的理论基础。也就是说两个陌生人之间的最多不会由超过6个熟人相连。
想到这就可以用floyd算法求解了。若存在一对顶点的距离大于7,那么这个定理也就不成立。注意,两个人之间不超过6个人,也就是说两个人最多由7条边相连,而不是6条边。
#include<iostream>
#include<stdio.h>
using namespace std;
const int Max = 100;
int g[Max][Max];
const int Infinity = 3000000;
int num;
int main()
{
int m, h, t;
bool flag;
while(scanf("%d%d", &num, &m) != EOF)
{
for(int i=0; i<Max; i++)
for(int j=0; j<Max; j++) g[i][j] = Infinity;
for(int i=0; i<Max; i++) g[i][i] = 0;
for(int i=0; i<m; i++)
{
scanf("%d%d", &h, &t);
g[h][t] = g[t][h] = 1;
}
for(int i=0; i<num; i++)
for(int j=0; j<num; j++)
for(int k=0; k<num; k++)
if(g[j][k] > g[j][i] + g[i][k]) g[j][k] = g[j][i] + g[i][k];
flag = true;
for(int i=0; i<num; i++)
for(int j=0; j<num; j++)
if(g[i][j] > 7)
{
flag = false;
break;
}
if(flag) printf("Yes\n");
else printf("No\n");
}
system("pause");
return 0;
}