http://acm.hdu.edu.cn/showproblem.php?pid=1869
题目标题:六度分离
题目大意:求每个点的与别的点的最短路,超过6则输出NO,不超过输出YES
只要一对顶点距离大于6,则可输出结果,所以此题用floyd算法
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,m;
int a[105][105];
int min(int x,int y){
if(x>y) return y;
else return x;
}
int main()
{
while(cin>>n>>m)
{
memset(a,63,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++)
a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
bool sign=true;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(a[i][j]>7){
sign=false;
break;
}
}
if(sign==false) break;
}
if(sign==true) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return 0;
}