立志用最少的代码做最高效的表达


著名的“汉密尔顿(Hamilton)回路问题”是要找一个能遍历图中所有顶点的简单回路(即每个顶点只访问 1 次)。本题就要求你判断任一给定的回路是否汉密尔顿回路。

输入格式:
首先第一行给出两个正整数:无向图中顶点数 N(2<N≤200)和边数 M。随后 M 行,每行给出一条边的两个端点,格式为“顶点1 顶点2”,其中顶点从 1 到N 编号。再下一行给出一个正整数 K,是待检验的回路的条数。随后 K 行,每行给出一条待检回路,格式为:n V1 V​2 ⋯ V​n
其中 n 是回路中的顶点数,V​i是路径上的顶点编号。

输出格式:
对每条待检回路,如果是汉密尔顿回路,就在一行中输出"YES",否则输出"NO"。

输入样例:
6 10
6 2
3 4
1 5
2 5
3 1
4 1
1 6
6 3
1 2
4 5
6
7 5 1 4 3 6 2 5
6 5 1 4 3 6 2
9 6 2 1 6 3 4 5 2 6
4 1 2 5 1
7 6 1 3 4 5 2 6
7 6 1 2 5 4 3 1

输出样例:
YES
NO
NO
NO
YES
NO


汉密尔顿模板题。

汉密尔顿回路:
若图中从某点出发,经过所有点一次后又重新回到起点,则该回路为汉密尔顿回路。

拓展:欧拉回路:
若图中从某点出发,经过所有边一次后又重新回到起点,则该回路为汉密尔顿回路。

判断是否为汉密尔顿回路的条件:
1、数列起点与终点相同
2、数列每相邻两个点间为通路
3、除起点外,其他所有点都出现过一次(0次或2次以上都不行


#include<iostream>
#include<cstring>
#include<vector>using namespace std;
//稠密则数组,稀疏则链表
int G[210][210], vis[210];
int n, k;int main() {cin >> n >> k;for(int i = 0; i < k; i++) {int x, y; cin >> x >> y;G[x][y] = G[y][x] = 1;}/*汉密尔顿回路的条件:1、起点与终点相同2、每相邻两个点间为通路3、除起点外,其他所有点都出现过一次 */int m; cin >> m;for(int i = 0; i < m; i++) {int num; cin >> num;bool flag = true;              //判断是否为回路   memset(vis, 0, sizeof(vis));    //初始化 vector<int>v;for(int j = 0; j < num; j++) {int x; cin >> x; v.push_back(x);}int sta = v[0], fin = v[v.size()-1];if(sta != fin) flag = false;        //情况1,起点与终点不同 for(int i = 1; i < v.size(); i++) {if(G[v[i-1]][v[i]] != 1) flag = false;  //情况2相邻点不通vis[v[i]]++;}for(int i = 1; i <= n; i++) {//情况3:除起点外,有点出现了两次或没出现过 if(vis[i] == 0 || (vis[i]==2 && i != sta)) flag = false;}cout << (flag ? "YES\n" : "NO\n"); }return 0;
}

耗时:


      ——弱小和无知不是生存的障碍,傲慢才是。

汉密尔顿回路 (25 分)【思路讲解】相关推荐

  1. 7-7 汉密尔顿回路 (25 分)(C语言实现)

    7-7 汉密尔顿回路 (25 分) 这道题就是问是否是回路,回路满足:1.过所有的点 2.没有返回 #include <string.h> #include <stdio.h> ...

  2. 7-169 汉密尔顿回路 (25 分)

    7-169 汉密尔顿回路 (25 分) 著名的"汉密尔顿(Hamilton)回路问题"是要找一个能遍历图中所有顶点的简单回路(即每个顶点只访问 1 次).本题就要求你判断任一给定的 ...

  3. 7-3 树的同构 (25 分)(思路加详解)来呀baby!!!!!!!!

    一:题目 7-3 树的同构 (25 分) 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把 ...

  4. 7-43 字符串关键字的散列映射 (25 分)(思路+详解+不懂的兄弟们来呀)兄弟们我干了5个小时,一个一个测试点过的

    一:题目 7-43 字符串关键字的散列映射 (25 分) 给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数H(Key)将关键字Key中的最后3个字符映射为整数,每个字符占5位 ...

  5. 7-32 哥尼斯堡的“七桥问题” (25 分)(思路+详解+题目分析)两种做法任选其一

    一:题目: 哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示. 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707-178 ...

  6. 7-53 两个有序序列的中位数 (25 分)(思路加详解)用STL容器中的set容器的自动去重过不去

    一:题目 已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A 0 ​ ,A 1 ​ ,⋯,A N−1 ​ 的中位数指A (N−1)/2 ​ 的值,即第⌊(N+1)/ ...

  7. 7-35 城市间紧急救援 (25 分)(思路加详解)

    一:题目 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上.当其他城 ...

  8. 7-1 活动选择问题 (25 分)(思路+详解+扩展)宝 今天你AC了吗!!!

    一:题目 假定一个有n个活动(activity)的集合S={a 1 ​ ,a 2 ​ ,-,a n ​ },这些活动使用同一个资源(例如同一个阶梯教室),而这个资源在某个时刻只能供一个活动使用.每个活 ...

  9. 7-49 打印学生选课清单 (25 分)(思路+详解+map做法(一对多)+超时解决)Come baby!

    一:题目 假设全校有最多40000名学生和最多2500门课程.现给出每门课的选课学生名单,要求输出每个前来查询的学生的选课清单. 输入格式: 输入的第一行是两个正整数:N(≤40000),为前来查询课 ...

最新文章

  1. PVD与CVD性能比较
  2. java modelmapper_java - 使用ModelMapper映射抽象类型的字段 - SO中文参考 - www.soinside.com...
  3. VC++ .NET 2003学习
  4. android平台 arcgisr_《ArcGIS Runtime SDK for Android开发笔记》——Android Studio基本配置与使用...
  5. Atitit 软件工程概览attilax总结
  6. SQL Server 2008安装配置说明书+简单使用 亲测可用
  7. windows mac 安装lua
  8. linux下安装erlang
  9. [css] 请用css写一个扫码的加载动画图
  10. genymotion+android studio Android 搭建开发环境
  11. nlp-tutorial代码注释3-1,RNN简介
  12. SSH关于公钥认证Permission denied的问题
  13. POJ NOI MATH-7826 分苹果
  14. windows系统vbs脚本 恶搞将系统搞崩 死机 以及解决
  15. 【github】命令和错误小结
  16. 【数学建模】第一讲-层次分析法
  17. Si4438, Si4432, Sx1278, Sx1276, Sx1212无线数传模块简单介绍
  18. NAT模式实现虚拟机共享主机网络
  19. 新概念二册 Lesson 12 Goodbye and good luck再见,一路顺风 (一般将来时)
  20. 序列到序列模型(一)(基本模型,RNN Search,注意力机制)

热门文章

  1. Wireshark 抓包分析 RTSP/RTP/RTCP 基本工作过程
  2. 如何分析常见的TCP问题?
  3. C++11正则表达式例子集合
  4. 【线上直播】ICASSP论文解读 | 智能语音交互技术
  5. Google与Pixar开发Draco支持USD格式 加速3D对象传输
  6. ffplay.c学习-1-框架及数据结构
  7. 《Go语言圣经》学习笔记 第五章函数
  8. 深入浅出理解 Spark:环境部署与工作原理
  9. LF AI Day中国站火热报名中
  10. AI:你们是不是在等一顶红帽子?