六度分離
Lele對這個理論相當有興趣,於是,他在HDU裏對N個人展開了調查。他已經得到了他們之間的相識關係,現在就請你幫他驗證一下“六度分離”是否成立吧。
對於每組測試,第一行包含兩個整數N,M(0<N<100,0<M<200),分別代表HDU裏的人數(這些人分別編成0~N-1號),以及他們之間的關係。
接下來有M行,每行兩個整數A,B(0<=A,B<N)表示HDU裏編號爲A和編號B的人互相認識。
除了這M組關係,其他任意兩人之間均不相識。
題目地址:點擊打開鏈接
#include<cstdio>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define oo 100000000
int n, m, a, b;
int i, j, k;
int pri[205][205];
void floyd()
{
for(k = 0; k < n; k++)
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
pri[i][j]=min(pri[i][j],pri[i][k]+pri[k][j]);
}
int main()
{
while(scanf("%d%d", &n, &m) != EOF)
{
for(i = 0; i < n; i++)//n個人的編號是從0到n-1
for(j = 0; j < n; j++)
pri[i][j] = i == j ? 0 : oo;
for(i = 0; i < m; i++)
{
scanf("%d %d", &a, &b);
pri[a][b] = pri[b][a] = 1;
//直接給出的人與人之間認識的距離爲一 ,此處若是0勢必影響後續指令
}
floyd();//好好的函數可不要忘記調用
int cnt = 0;//記錄兩兩間關係數目
for(i = 0; i < n-1; i++)
for(j = i+1; j < n; j++)
{
if(pri[i][j] <=7)
//兩兩間有關係 且 中間人不超過6個
cnt++;
// printf("%d\n", pri[i][j]);
}
if(cnt == n*(n-1)/2) printf("Yes\n");
else printf("No\n");
}
return 0;
}