本身在图论不是一道难题;
需要注意这个环判断的几个隐藏点:
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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。