http://acm.hdu.edu.cn/showproblem.php?pid=1869
#include<stdio.h> #define INF 0xffffff #define N 105 int map[N][N]; int i,j,k; void floyd(int n) { for(k=0;k<n;k++) for(i=0;i<n;i++) for(j=0;j<n;j++) if(map[i][j]>map[i][k]+map[k][j]) map[i][j]=map[i][k]+map[k][j]; } bool judge(int n) { for(i=0;i<n;i++) for(j=0;j<n;j++) if(map[i][j]>7) return false; return true; } int main(void) { int n,m,s,e,a,b,d; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0;i<n;i++) for(j=0;j<n;j++) { if(i==j) map[i][j]=0; else map[i][j]=INF; } for(i=0;i<m;i++) { scanf("%d%d",&a,&b); map[a][b]=map[b][a]=1; } floyd(n); if(judge(n)) puts("Yes"); else puts("No"); } return 0; }