1122. Hamiltonian Cycle (25)解题报告

来源:互联网 发布:淘宝云客服培训网址 编辑:程序博客网 时间:2024/05/16 14:03
满足以下条件之一或几个就不是哈密顿环:
  1. n不等于N+1;
  2. 相邻两个结点不相连;
  3. 头尾两个结点不一样;
  4. 环没有覆盖所有结点。

#define _CRT_SECURE_NO_WARNINGS#include <cstdio>#include <cstdlib>#include <set>using namespace std;int main(void){int N, M, i, j, v1, v2, v3, head, K, n;bool arr[201][201] = { {false} };setvbuf(stdout, new char[1 << 20], _IOFBF, 1 << 20);scanf("%d %d", &N, &M);for (i = 0; i < M; i++) {scanf("%d %d", &v1, &v2);arr[v1][v2] = true;arr[v2][v1] = true;}scanf("%d", &K);set<int> s;bool flag;for (i = 0; i < K; i++) {flag = true;scanf("%d", &n);if (n != N + 1) {flag = false;}scanf("%d %d", &v1, &v2);s.insert(v1);s.insert(v2);head = v1;if (!arr[v1][v2]) {flag = false;}for (j = 2; j < n; j++) {scanf("%d", &v3);s.insert(v3);v1 = v2;v2 = v3;if (!arr[v1][v2]) {flag = false;}}if (head != v2) {flag = false;}if (s.size() != N) {flag = false;}if (flag) {puts("YES");}else {puts("NO");}s.clear();}return 0;}

0 0