判断是不是这个环要判断四个条件
1.点的个数是不是n+1个
2.首尾点相不相等
3.是不是经过了每一个点
4.道路是不是连通
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int maxv=210;
bool vis[maxv];
int g[maxv][maxv]={0};
int main(){
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++){
int v1,v2;
cin>>v1>>v2;
g[v1][v2]=g[v2][v1]=1;
}
int k;
cin>>k;
for(int i=0;i<k;i++){
vector<int> list;
memset(vis,false,sizeof(vis));
int num;
cin>>num;
for(int j=0;j<num;j++){
int id;
cin>>id;
list.push_back(id);
vis[id]=true;
}
bool througheverypoint=true;
for(int j=1;j<=n;j++){
if(vis[j]==false){
througheverypoint=false;
break;
}
}
bool isconnect=true;
for(int j=1;j<num;j++){
if(g[list[j-1]][list[j]]==0){
isconnect=false;
break;
}
}
if(througheverypoint&&isconnect&&num==n+1&&list[0]==list[num-1]){
printf("YES\n");
}else{
printf("NO\n");
}
}
return 0;
}