哈密顿图的判定是世界级难题。

设G是n阶无向简单图,若对于G中任意不相邻的顶点u、v,均有d(u)+d(v)>=n-1,则说明G中存在哈密顿通路。

不过,这个条件只是充分条件,而不是必要条件。

也就是说,满足该条件一定存在哈密顿通路,但不满足该条件不一定不存在哈密顿通路。

如下图便不满足,但它存在哈密顿路。

所以要判断哈密顿回路和哈密顿路径一般通过深搜回溯去判定,代码:

#include <algorithm>
#include <iostream>
#include <string.h>
#include <vector>
using namespace std;
const int maxn = 1005;
vector<int> G[maxn];
int n, m, root;
int vis[maxn];
int HamiPath(int cur, int cnt)
{if(cnt == n){//判定哈密顿回路 for(int i = 0; i < G[cur].size(); ++i)if(G[cur][i] == root) return 1;return 0;//return 1; //判定哈密顿路直接return 1即可 }for(int i = 0; i < G[cur].size(); ++i){int v = G[cur][i];if(vis[v]) continue;vis[v] = 1;if(HamiPath(v, cnt+1)) return 1;vis[v] = 0;}return 0;
}
int main()
{cin >> n >> m;memset(vis, 0, sizeof vis); for(int i = 1; i <= n; ++i) G[i].clear();for(int i = 1; i <= m; ++i){int u, v;scanf("%d %d", &u, &v);G[u].push_back(v);G[v].push_back(u);}root = 1;if(HamiPath(root, 1)) puts("exist");else puts("not exist");return 0;
}

更为重要的是欧拉图的判定:

定义:

欧拉回路:每条边恰好只走一次,并能回到出发点的路径
欧拉路径:经过每一条边一次,但是不要求回到起始点

欧拉回路存在性的判定:

一、无向图
每个顶点的度数都是偶数,则存在欧拉回路。

二、有向图(所有边都是单向的)
每个节顶点的入度都等于出度,则存在欧拉回路。

欧拉路径存在性的判定:

一、无向图
一个无向图存在欧拉路径,当且仅当该图所有顶点的度数为偶数或者除了两个度数为奇数外其余的全是偶数。

二、有向图

一个有向图存在欧拉路径,当且仅当该图所有顶点的度数为零或者一个顶点的度数为1,另一个度数为-1,其他顶点的度数为0。(有向图的度数等于该点的出度+入度,其中出度和入度一正一负)

然后较难的是混合图的欧拉回路和欧拉路径是否存在的判定:

混合图的欧拉回路的判定就是上一篇博客的例题通过最大流求解,也有自己的个人理解。

混合图的欧拉路径的判定,这个人的方法可以实现:求欧拉路径的第一步一定是求欧拉回路,在混合图上也不例外,如何判断混合图欧拉回路问题的存在性呢?首先,用上篇博客的方法判断该图是否存在欧拉回路,如果存在,欧拉路径一定存在。如果欧拉回路不存在,那么我们枚举欧拉路径的起点和终点,连接一条无向边,然后再用最大流判断是否存在欧拉回路即可。

哈密顿图和欧拉图知识小结相关推荐

  1. 好程序员分享24个canvas基础知识小结

    好程序员分享24个canvas基础知识小结,非常全面详尽,推荐给大家. 现把canvas的知识点总结如下,以便随时查阅. 1.填充矩形 fillRect(x,y,width,height); 2.绘制 ...

  2. unicode 编码转换漏洞_好程序员Python教程之字符串编码知识小结

    好程序员Python教程之字符串编码知识小结,提及Python字符串,你会想到什么?是ASCII,还是Unicode?他们之间是如何转换的?字符串编码和字符串有什么区别?接下来好程序员Python教程 ...

  3. Android技能树 — 树基础知识小结(一)

    前言: 现在安卓面试,对于数据结构的问题也越来越多了,也经常看到别人发的面试题都是问什么红黑树,二叉树查找等,所以我们虽然不会马上就会各种难的面试题,但起码树的基础知识还是要会的,这样才能去进一步学. ...

  4. python编码转换语句_好程序员Python教程之字符串编码知识小结

    好程序员Python教程之字符串编码知识小结,提及Python字符串,你会想到什么?是ASCII,还是Unicode?他们之间是如何转换的?字符串编码和字符串有什么区别?接下来好程序员Python教程 ...

  5. python static 的用法_Python中static相关知识小结

    非 static 编译 不指定额外参数直接编译 Python: $ ./configure $ make 查看所依赖的共享库: $ ldd python linux-vdso.so.1 => ( ...

  6. 好程序员分享24个canvas基础知识小结 1

    好程序员分享24个canvas基础知识小结,非常全面详尽,推荐给大家. 现把canvas的知识点总结如下,以便随时查阅. 1.填充矩形 fillRect(x,y,width,height); 2.绘制 ...

  7. C/C++位域知识小结

    C/C++位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存对 ...

  8. 知识小结------数据分析------Fisher‘s exact test(费希尔检测)

    系列知识小结目录 Cox比例风险回归模型(proportional hazards model) Fisher's exact test费希尔检测 系列知识小结目录 前言 一.Fisher's exa ...

  9. 推广知识小结(名词篇CPA、CPS、CPC、CPM、CPT、CPD)

    推广知识小结(名词篇) 一.CPC 二.CPM 三.CPA 四.CPS 五.CPT 六.CPD 一.CPC CPC,这一种推广模式全称为:Cost Per Click.这一种推广方式是按照点击量来进行 ...

  10. WinCE流驱动基础知识小结

    WinCE流驱动基础知识小结 1.基础知识: 1)系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件细节,在应用程序看来硬件只 ...

最新文章

  1. 1003 Emergency(Dijkstra,Bellman-Ford,SPFA三种解法)
  2. 第十五届全国大学生智能汽车竞赛各分赛区国赛预选队伍成绩认定一览表
  3. PIC32单片机harmony开发环境 - SPI例程和代码分析
  4. [css] 说说你对!important的理解,一般在哪些场景使用?
  5. java 做ui_【原创】JavaApplication的UI也可以做的很美
  6. lean软件Android有吗,leanchat-android
  7. 【BZOJ3143】游走,概率计算+高斯消元
  8. 激活函数active function
  9. eclipse中安装flex插件
  10. Deep Learning快速学习方法
  11. 京东聚合收银(会员码支付)接口封装C++
  12. [笔记]ASCLL码表(48 “0”,65 “A”,97 “a”)2022.3.12
  13. 计算机网络原理实验实验一:使用网络协议分析仪Wireshark
  14. 大数据的核心价值是什么? 本质是什么?
  15. 4071 国际象棋(枚举)
  16. ERP巨头温州困局解读
  17. XCTF WEB mfw
  18. 这20种PS技术让你的照片美不胜收
  19. Scratch-(六)-妙笔生花
  20. (转)LRC歌词编辑攻略1

热门文章

  1. BIN文件和HEX文件差异
  2. 服务器系统安装蓝牙驱动,win10蓝牙驱动怎么安装?-win10蓝牙驱动的安装教程 - 河东软件园...
  3. NVIDIA显卡驱动丢失 安装失败
  4. lol服务器维护2021,英雄联盟客户端清理:2021进度与后续计划
  5. php168 shell,php168 v6/v7鸡肋Getshell安全问题
  6. 【android】网络定位服务NetworkLocationProvider
  7. EnableQ在线问卷调查引擎在学校教学教评中的作用
  8. VR是什么,去哪里学习?
  9. 免费SSL证书的制作
  10. Facebook正式改名Meta,一个元宇宙新纪元由此开始