没有哈密瓜只有哈密顿----图论之哈密顿回路
老规矩,先来百度一下
哈密顿图(哈密尔顿图)(英语:Hamiltonian graph,或Traceable graph)是一个无向图,由天文学家哈密顿提出,由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次。在图论中是指含有哈密顿回路的图,闭合的哈密顿路径称作哈密顿回路(Hamiltonian cycle),含有图中所有顶点的路径称作哈密顿路径(Hamiltonian path)。
通俗来说就是,哈密顿路径就是每个点经过且只经过一次的路径,而最终又回到起点的路径就哈密顿回路。
哈密顿路径问题在上世纪七十年代初,终于被证明是"NP完备"的。据说具有这样性质的问题,难于找到一个有效的算法。也就是说这个问题,没有实际的算法解决。
所以我们也就是简单了解一下相关定理。
(1)若图的最小度不小于顶点数的一半,则图是哈密顿图;
(2)若图中每一对不相邻的顶点的度数之和不小于顶点数,则图是哈密顿图。
(3)范定理:若图中每对距离为2的点中有一点的度数至少是图的点数的一半,则该图存在哈密尔顿圈。
哈密顿绕行世界问题HDU - 2181
20的3次方,直接暴力dfs跑一遍
1 #include<cstdio> 2 int vv[25][5],ans[25],vis[25]; 3 int m,cnt; 4 void dfs(int n,int u){ 5 ans[n]=u; 6 if(n==21){ 7 printf("%d: ",cnt++); 8 for(int i=1;i<=21;i++) printf(" %d",ans[i]); 9 printf("\n"); 10 return ; 11 } 12 for(int i=1,v;i<=3;i++){ 13 v=vv[u][i]; 14 if(!vis[v]){ 15 if(v==m&&n!=20) continue; 16 vis[v]=1; 17 dfs(n+1,v); 18 vis[v]=0; 19 } 20 } 21 } 22 int main(){ 23 for(int i=1;i<=20;i++) 24 for(int j=1;j<=3;j++){ 25 scanf("%d",&vv[i][j]); 26 for(int k=1;k<j;k++) if(vv[i][k]>vv[i][j]){ 27 int temp=vv[i][j];vv[i][j]=vv[i][k];vv[i][k]=temp; 28 } 29 } 30 while(scanf("%d",&m)&&m){ 31 for(int i=1;i<=20;i++) vis[i]=0; 32 cnt=1; 33 dfs(1,m); 34 } 35 return 0; 36 }
暴力出奇迹
A sample Hamilton pathHDU - 3538
题意:求从0出发的最短哈密顿路径长度,没有就-1
暴力搜索的话21的21次方,肯定是不可能的,然后我们想一下,每个点走没走的话,那就是1或0,那我们从状态来考虑的就2的21次方-1种状态,也就全0到全1,某位有1就代表这个点走过了。
所以就成了状压dp,然后路径的话还得记录下当前最后走的点,所以dp[i][j]就是i这个状态下,最后走到的点是j的最短路径。最后就一些细节的判断。
1 #include<cstdio> 2 #include<algorithm> 3 using namespace std; 4 const int N=1<<21,inf=1e9+7; 5 int dp[N][25],dis[25][25],cf2[25]={1},fir[25]; 6 int main(){ 7 int n,m,nn,a,b; 8 for(int i=1;i<=21;i++) cf2[i]=cf2[i-1]<<1; 9 while(~scanf("%d%d",&n,&m)){ 10 nn=1<<n; 11 for(int i=0;i<n;i++) fir[i]=0; 12 for(int i=0;i<nn;i++) 13 for(int j=0;j<n;j++) 14 dp[i][j]=inf; 15 for(int i=0;i<n;i++) 16 for(int j=0;j<n;j++) 17 scanf("%d",&dis[i][j]); 18 for(int i=0;i<m;i++){ 19 scanf("%d%d",&a,&b); 20 if(a!=0) fir[b]|=cf2[a]; 21 } 22 dp[1][0]=0; 23 for(int i=1;i<nn;i++) 24 for(int j=0;j<n;j++){ 25 if(dp[i][j]==inf) continue; 26 for(int k=1;k<n;k++){ 27 if((i&cf2[k])!=0||(i&fir[k])!=fir[k]) continue; 28 if(dis[j][k]!=-1) dp[i+cf2[k]][k]=min(dp[i+cf2[k]][k],dp[i][j]+dis[j][k]); 29 } 30 } 31 int ans=inf; 32 for(int i=0;i<n;i++) if(ans>dp[nn-1][i]) ans=dp[nn-1][i]; 33 if(ans==inf) ans=-1; 34 printf("%d\n",ans); 35 } 36 return 0; 37 }
简单写写
转载于:https://www.cnblogs.com/LMCC1108/p/11324389.html
没有哈密瓜只有哈密顿----图论之哈密顿回路相关推荐
- 离散数学-图论-哈密顿图及其应用
哈密顿图 一.定义概念 1.哈密顿通路 设G=<V,E>为一图(无向图或有向图).G中经过每个顶点一次且仅一次的通路称作哈密顿通路 2.哈密顿回路 G中经过每个顶点一次且仅一次的回路(通路 ...
- 离散数学---期末复习知识点
一. 数理逻辑 [复习知识点] 1.命题与联结词(否定¬.析取∨.合取∧.蕴涵→.等价↔),命题(非真既假的陈述句),复合命题(由简单命题通过联结词联结而成的命题) 2.命题公式与赋值(成真.成假), ...
- 哈密顿图 哈密顿回路 哈密顿通路(Hamilton)
本文链接:http://www.cnblogs.com/Ash-ly/p/5452580.html 概念: 哈密顿图:图G的一个回路,若它通过图的每一个节点一次,且仅一次,就是哈密顿回路.存在哈密顿回 ...
- 图论 —— 图的遍历 —— 哈密顿问题
[基本概念] 哈密尔顿通路:经过图中每个结点且仅经过一次的通路. 哈密尔顿回路:经过图中每个结点且仅经过一次的回路. 哈密尔顿图:存在哈密尔顿回路的图. 竞赛图:每对顶点之间都有一条边相连的有向图,n ...
- POJ-2438 哈密顿环 哈密瓜很甜
无向图经过所有的节点一次且仅一次:哈密瓜路径 无向图经过所有的边一次且仅一次:欧拉路径 带权哈密顿路径就是旅行商问题. 参考博客:https://blog.csdn.net/zhouzi2018/ar ...
- 图论(三):哈密顿图与哈密顿回路
一.定义 1.哈密顿通路 设G=<V,E>为一图(无向图或有向图).G中经过每个顶点一次且仅一次的通路称作哈密顿通路.与欧拉通路类似,一个是通过点,一个是通过边. 2.哈密顿回路 G中经过 ...
- 图论模型:哈密顿循环
哈密顿循环 专业词汇 vertex 顶点 hamiltonian_cycle 哈密顿循环 一个顶点出发,经过图中每个顶点一次且仅一次,最后回到出发点的路径 程序设计思路 将当前顶点添加到路径中 如果路 ...
- 最短哈密顿环 退火_hdu 5418 Victor and World (最短哈密顿回路)
给你n个国家,m条路线:u_i与v_i之间的距离w_i. 输出从1号国家出发经过每个国家至少一次再回到1号国家的最短距离. [官方题解]: 我们首先需要预处理出任意两个国家之间的最短距离,因为数据范围 ...
- 『ACM-算法-图论』算法竞赛进阶指南--hamilton路径(模板)
写在前面:我们主要还是分享算法的模板,而不是去刨析算法的原理! 什么是哈密尔顿路径 哈密顿图(哈密尔顿图)(英语:Hamiltonian graph,或Traceable graph)是一个无向图,由 ...
最新文章
- python爬虫正则表达式实例-Python爬虫(十一)_案例:使用正则表达式的爬虫
- 在MAC上给Anaconda的python安装tensorflow
- Java 反射机制分析指南
- XML中的CDATA是什么
- jQuery常见的50种用法
- 结对开发——一维数组最大子数组判断溢出
- shell编程关于数组的那点事
- 农村人深加工红薯,一招增值数倍,机器一条龙操作省人力
- 忽然感觉公司的工作环境有污染,墙壁和地面会散发异味,时间长了会头疼。...
- Bootstrap简洁、直观、强悍的前端开发框架
- AngularJs HelloWorld
- 黑马python培训视频网盘下载_黑马课堂大数据全套视频课程百度云下载
- android 高德地图 java.lang.UnsatisfiedLinkError: Native method not found: com.autonavi.amap.mapcore.MapC
- Linux中关于API函数与系统调用
- 五笔86版字根图程序
- python爬百度贴吧_python爬虫-爬取百度贴吧帖子加图片
- C++习题--实数的输出格式
- 合并后的58赶集为何驶入新的赛道?
- 【官方推荐】微信小程序搜索优化指南
- 《无人机网络与通信》整理