哈密顿回路满足的条件
1.经过所有点
2..终点和起点相同
3.回路的点数等于图顶点数+1(也就是除去起点终点每个点都走一次)
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
int n,m,a,b,T;
int g[300][300];
int main()
{
cin >> n >> m;
for(int i = 0 ; i < m; i ++)
{
cin >> a >> b;
g[a][b] = g[b][a] = 1;
}
cin >> T;
while(T --)
{
int tt,f = 1,all = 1;
cin >> tt;
vector<int>v(tt);
unordered_map<int,int>mp;
for(int i = 0; i < tt; i ++)
{
cin >> v[i];
mp[v[i]] ++;
}
for(int i = 1; i < tt; i ++) if(g[v[i]][v[i - 1]] != 1) f = 0;
for(int i = 1; i <= n; i ++) if(!mp.count(i)) all = 0;
if(f == 0 || v[0] != v.back() || all == 0 || tt != n + 1) puts("NO");
else puts("YES");
}
return 0;
}