1122 Hamiltonian Cycle(哈密顿图)

题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805351814119424

大致题意就是给出一个图,K个不同的路径,判断是否是哈密尔顿路径,即包括图中所有顶点的环。

分析:

1,判断路径能否走通,能则输出NO,否则转2;

2,判断路径上的不同顶点数是否等于总的顶点数,且起点和终点是一样,不是则输出NO,否则输出YES。

 1 #include<iostream>
 2 #include<vector>
 3 #include<unordered_map>
 4 using namespace std;
 5 
 6 int G[210][210];
 7 int main() {
 8     int n,m,u,v,k;
 9     cin>>n>>m;
10     for(int i = 0; i < m; ++i) {
11         cin>>u>>v;
12         G[u][v] = G[v][u] = 1;
13     }
14     cin>>k;
15     while(k--) {
16         int num,flag = 1;
17         cin>>num;
18         vector<int> v(num);
19         unordered_map<int,bool> mp;
20         for(int i = 0; i < num; ++i) {
21             cin>>v[i];
22             mp[v[i]] = true;
23         }
24         for(int i = 1; i < num && flag; ++i)
25             if(G[v[i]][v[i-1]] == 0) flag = 0; //判断路径能否走通 
26         if(flag && num-1 == n && v[0] == v[num-1] && mp.size() == num-1) printf("YES\n");
27         else printf("NO\n");
28     }
29     return 0;
30 }

 

posted @ 2020-03-19 10:26  tangq123  阅读(579)  评论(0)    收藏  举报