一开始想到floyd
做的时候出现了一点问题 :如果两者有关系 则定义为1;
但是数组是对称的 所以要设置成 m1[a][b]=m1[b][a]=1;

#include<bits/stdc++.h> using namespace std; int m1[300][300]; int main() { int n,m; while(scanf("%d%d",&n,&m)==2) { memset(m1,10,sizeof(m1)); for(int i=0;i<n;i++)m1[i][i]=0; for(int i=1;i<=m;i++) { int a,b; scanf("%d %d",&a,&b); m1[a][b]=m1[b][a]=1; } // for(int i=0;i<n;i++) // {for(int j=0;j<n;j++) // printf("%d ",m1[i][j]); // printf(" ");} for(int k=0;k<n;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) { if(m1[i][j]>m1[i][k]+m1[k][j]) m1[i][j]=m1[i][k]+m1[k][j]; } // for(int i=0;i<n;i++) // {for(int j=0;j<n;j++) // printf("%d ",m1[i][j]); // printf(" ");} int ok=1; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { if(m1[i][j]>7&&m1[j][i]>7){ok=0;break;} } if(ok)printf("Yes "); else printf("No "); } }