您的位置:首页 > 其它

HDU 1869 六度分离(最短路)

2017-12-16 21:32 381 查看
【题目链接】

http://acm.hdu.edu.cn/showproblem.php?pid=1869

题目意思

有一群人,问是否满足六度分离(任意2个人通过6个人最终会认识)。

解题思路

没什么好说的,初始为1,跑遍佛洛依德判断是否有大于7的两个人就好了

代码部分

#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int maxn=1005;
const int INF=0x3f3f3f;
int n,m,s,t;
int a[maxn][maxn];
int main()
{
while (scanf("%d %d",&n,&m)!=EOF)
{
bool fal=0;
memset(a,INF,sizeof(a));
for (int i=0;i<n;i++)
a[i][i]=0;
for (int i=0; i<m; i++)
{
int x,y;
scanf("%d %d",&x,&y);
a[x][y]=1;
a[y][x]=1;
}
for (int k=0;k<n;k++)
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
if(a[i][j]>(a[i][k]+a[k][j]))
{
a[i][j]=a[i][k]+a[k][j];
a[j][i]=a[i][k]+a[k][j];
}
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
{
if (a[i][j]>7)
{
//cout<<i<<j<<' '<<a[i][j]<<endl;
fal=1;
}
}
if (!fal)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息