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

设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. Axure8.0 网页 or App 鼠标滚动效果
  2. Mac中MacPorts安装和使用
  3. Confluence 6 配置 HTTP 超时设置
  4. 部署在IIS上的网站如何调试
  5. 用计算机打印相片怎么调色,2018年底照片如何使用LOG模式进行调色
  6. C#语法——await与async的正确打开方式
  7. php curl json post请求_php post请求发送json对象数据参数
  8. Android 自定义UI--电池
  9. ubuntu搭建nfs网络文件系统
  10. Debian for ARM install python 3.5.x
  11. Vivado:信道编码卷积编码和RS编码IP核
  12. MYSQL 下载安装教程
  13. 思科GNS3模拟器安装包和流程
  14. Coursera 机器学习 第9章(下) Recommender Systems 学习笔记
  15. 深度强化学习综述论文 A Brief Survey of Deep Reinforcement Learning
  16. 芯片分享——MS9601A
  17. Perma.cc停止学术链接腐烂
  18. sqlsession生命周期
  19. 51单片机的超声波测距系统【proteus仿真+程序+报告+原理图】
  20. 云计算的概念、发展和原理

热门文章

  1. Delphi FireMonkey 3D 编程初探
  2. 【ASUS】关于华硕笔记本win7下GTX950M独显驱动无法安装上的解决方法
  3. 通信与协议Netty+Protobuf-游戏设计与开发(1)
  4. 有一种爱情,叫沉、重!
  5. 操作系统学习之windows发展史
  6. 万年历api接口调用文档
  7. 搭建一个网站的价格以及步骤全面解读
  8. 用c语言电脑系统指令,c语言文件 DOS命令大全(10)
  9. STM32库函数模板创建
  10. linux alsa 不创建声卡能否创建pcm设备,Linux ALSA声卡驱动之一:声卡的创建