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 }


浙公网安备 33010602011771号