可以用广搜,也可以用最短路来求,我用了最短路
用了Dijkstra+优先队列,15ms就过了,第一次用优先队列优化Dijkstra算法大概时间复杂度就m*log(n)左右
15ms代码


#include<cstdlib>
#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
const int INF = 1<<26;
using namespace std;

typedef struct node
{
 int next,d;
 node(){}
 node(int a,int b){next=a;d=b;}
 bool operator<(const node &a) const
 {
  if(d==a.d) return next<a.next;
  else return d>a.d;
 }
}node;

int dis[102],n,m;
vector<node>eg[102];

void Dijkstra(int s)
{
 int i,j;
 priority_queue<node> q;
 for(i=0;i<n;i++) dis[i]=INF;
 dis[s]=0;
 q.push(node(s,dis[s]));
 while(!q.empty())
 {
  node x=q.top(); q.pop();
  for(i=0;i<eg[x.next].size();i++)
  {
   node y=eg[x.next][i];
   if(dis[y.next]>x.d+y.d)
   {
    dis[y.next]=x.d+y.d;
    q.push(node(y.next,dis[y.next]));
   }
  }
 }

}

 

 


int main()
{
 int i,j,x,y,flag;
 while(scanf("%d %d",&n,&m)!=EOF)
 {
  flag=1;
  for(i=0;i<n;i++) eg[i].clear();
  for(i=0;i<m;i++)
  {
   scanf("%d %d",&x,&y);
   eg[x].push_back(node(y,1));
   eg[y].push_back(node(x,1));
  }
  for(i=0;i<n;i++)
  {
   Dijkstra(i);
   for(j=0;j<n;j++)
   {
    if(dis[j]>7)
    {
     flag=0;
     break;
    }
   }
   if(flag==0) break;
  }
  if(flag) printf("Yes\n");
  else printf("No\n");
 }
 return 0;
}