本身在图论不是一道难题;需要注意这个环判断的几个隐藏点:1.首位相同;2.每个节点只能访问一次;这里借鉴一位大神的操作,其实两种情况可以分两种判别方式,分开判别;这里再次说一下set查重贼好用,这里可以看是否出现重复节点;#include<iostream>#include<stdlib.h>#include<stdio.h>#include<vector>#include<set>using namespace std;using std::vector;using std::set;const int maxn=210;int main(){ int n,m,cnt,k,a[maxn][maxn]={0}; cin>>n>>m; for(int i=0;i<m;i++){ int t1,t2; scanf("%d%d",&t1,&t2); a[t1][t2]=a[t2][t1]=1; } cin>>cnt; while(cnt–){ cin>>k; vector<int> v(k); set<int> s; int f1=1; int f2=1; for(int i=0;i<k;i++){ scanf("%d",&v[i]); s.insert(v[i]); } if(s.size()!=n||k-1!=n||v[0]!=v[k-1]) f1=0; for(int i=0;i<k-1;i++) if(a[v[i]][v[i+1]]==0) f2=false; printf("%s",f1&&f2?“YES\n”:“NO\n”); } system(“pause”); return 0;}