老规矩,先来百度一下

哈密顿图(哈密尔顿图)(英语: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. 离散数学-图论-哈密顿图及其应用

    哈密顿图 一.定义概念 1.哈密顿通路 设G=<V,E>为一图(无向图或有向图).G中经过每个顶点一次且仅一次的通路称作哈密顿通路 2.哈密顿回路 G中经过每个顶点一次且仅一次的回路(通路 ...

  2. 离散数学---期末复习知识点

    一. 数理逻辑 [复习知识点] 1.命题与联结词(否定¬.析取∨.合取∧.蕴涵→.等价↔),命题(非真既假的陈述句),复合命题(由简单命题通过联结词联结而成的命题) 2.命题公式与赋值(成真.成假), ...

  3. 哈密顿图 哈密顿回路 哈密顿通路(Hamilton)

    本文链接:http://www.cnblogs.com/Ash-ly/p/5452580.html 概念: 哈密顿图:图G的一个回路,若它通过图的每一个节点一次,且仅一次,就是哈密顿回路.存在哈密顿回 ...

  4. 图论 —— 图的遍历 —— 哈密顿问题

    [基本概念] 哈密尔顿通路:经过图中每个结点且仅经过一次的通路. 哈密尔顿回路:经过图中每个结点且仅经过一次的回路. 哈密尔顿图:存在哈密尔顿回路的图. 竞赛图:每对顶点之间都有一条边相连的有向图,n ...

  5. POJ-2438 哈密顿环 哈密瓜很甜

    无向图经过所有的节点一次且仅一次:哈密瓜路径 无向图经过所有的边一次且仅一次:欧拉路径 带权哈密顿路径就是旅行商问题. 参考博客:https://blog.csdn.net/zhouzi2018/ar ...

  6. 图论(三):哈密顿图与哈密顿回路

    一.定义 1.哈密顿通路 设G=<V,E>为一图(无向图或有向图).G中经过每个顶点一次且仅一次的通路称作哈密顿通路.与欧拉通路类似,一个是通过点,一个是通过边. 2.哈密顿回路 G中经过 ...

  7. 图论模型:哈密顿循环

    哈密顿循环 专业词汇 vertex 顶点 hamiltonian_cycle 哈密顿循环 一个顶点出发,经过图中每个顶点一次且仅一次,最后回到出发点的路径 程序设计思路 将当前顶点添加到路径中 如果路 ...

  8. 最短哈密顿环 退火_hdu 5418 Victor and World (最短哈密顿回路)

    给你n个国家,m条路线:u_i与v_i之间的距离w_i. 输出从1号国家出发经过每个国家至少一次再回到1号国家的最短距离. [官方题解]: 我们首先需要预处理出任意两个国家之间的最短距离,因为数据范围 ...

  9. 『ACM-算法-图论』算法竞赛进阶指南--hamilton路径(模板)

    写在前面:我们主要还是分享算法的模板,而不是去刨析算法的原理! 什么是哈密尔顿路径 哈密顿图(哈密尔顿图)(英语:Hamiltonian graph,或Traceable graph)是一个无向图,由 ...

最新文章

  1. python爬虫正则表达式实例-Python爬虫(十一)_案例:使用正则表达式的爬虫
  2. 在MAC上给Anaconda的python安装tensorflow
  3. Java 反射机制分析指南
  4. XML中的CDATA是什么
  5. jQuery常见的50种用法
  6. 结对开发——一维数组最大子数组判断溢出
  7. shell编程关于数组的那点事
  8. 农村人深加工红薯,一招增值数倍,机器一条龙操作省人力
  9. 忽然感觉公司的工作环境有污染,墙壁和地面会散发异味,时间长了会头疼。...
  10. Bootstrap简洁、直观、强悍的前端开发框架
  11. AngularJs HelloWorld
  12. 黑马python培训视频网盘下载_黑马课堂大数据全套视频课程百度云下载
  13. android 高德地图 java.lang.UnsatisfiedLinkError: Native method not found: com.autonavi.amap.mapcore.MapC
  14. Linux中关于API函数与系统调用
  15. 五笔86版字根图程序
  16. python爬百度贴吧_python爬虫-爬取百度贴吧帖子加图片
  17. C++习题--实数的输出格式
  18. 合并后的58赶集为何驶入新的赛道?
  19. 【官方推荐】微信小程序搜索优化指南
  20. 《无人机网络与通信》整理

热门文章

  1. Java基础——LinkedList源码分析
  2. 不同种类的单片机通讯分析
  3. 广东去年处分厅官149人 追回外逃人员237人
  4. Flutter 动态加载自定义字体
  5. java环境变量win7_win7如何配置jdk环境变量|win7配置java环境变量的方法
  6. Latex排版常用命令
  7. 使用Latex排版选择题试卷
  8. RTX腾讯通怎么删除群聊人员
  9. 旗舰级安卓手机推荐 2022年不如买它
  10. MS切面时surface mesh设置小数提示错误解决方案