#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;
int map[500][500];//这里是用二维数组来记录两个点之间的关系
int n,m;
int dijkstra(int dis[500][500])
{
int i,j,k;
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(dis[i][k]<INF&&dis[k][j]<INF)
if(dis[i][j]>dis[i][k]+dis[k][j])
/*
这里的K是中间点,比如1->7
我们可以这样走:1->6 + 6->7 此时的6就是中间点
那么这里的 for(k=0;k<n;k++)的意思就是,以K为中间点,松弛所有与K连接的点
*/
dis[i][j]=dis[i][k]+dis[k][j];
return 0;
}
int main()
{
int i,j;
int a,b;
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(map,INF,sizeof(map));
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
map[a][b]=1;
map[b][a]=1;
}
dijkstra(map);
int flag=1;//这里的flag还是有点小作用的
for(i=0;i<n&&flag;i++)
for(j=0;j<n&&flag;j++)
if(map[i][j]>7)
flag=0;
if(flag)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
hdu 1869 六度分离-floyd
最新推荐文章于 2019-07-11 16:58:22 发布