保存模版

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<cstring>
  4. #include<cstdlib>
  5. #include<algorithm>
  6. #include<cmath>
  7. using namespace std;
  8.  
  9. int n,m,st,ed;
  10. int len,a[];
  11. bool v[],mp[][];
  12. void reverse(int l,int r)
  13. {
  14. while(l<r)
  15. {
  16. swap(a[l],a[r]);
  17. l++;r--;
  18. }
  19. }
  20. void expand()
  21. {
  22. while()
  23. {
  24. bool bk=false;
  25. for(int i=;i<=n;i++)
  26. {
  27. if(v[i]==false&&mp[ed][i]==true)
  28. {
  29. v[i]=true;a[++len]=i;ed=i;
  30. bk=true;break;
  31. }
  32. }
  33. if(bk==false)break;
  34. }
  35. }
  36. void hamilton()
  37. {
  38. st=;
  39. for(int i=;i<=n;i++)
  40. if(mp[st][i]==true){ed=i;break;}
  41. v[st]=true;a[++len]=st;
  42. v[ed]=true;a[++len]=ed;
  43.  
  44. while()
  45. {
  46. expand();
  47. reverse(,len);swap(st,ed);
  48. expand();
  49.  
  50. //若st,ed不相连,处理成相连
  51. if(mp[st][ed]==false)
  52. {
  53. //在a[2]到a[len-1]中寻找两个相邻的且与st、ed同时相连的点(必存在)
  54. for(int i=;i<len-;i++)
  55. {
  56. if(mp[st][a[i+]]==true&&mp[ed][a[i]]==true)
  57. {
  58. reverse(i+,len);//倒置a[i+1]到a[len]
  59. ed=a[len];break;
  60. }
  61. }
  62. }
  63. if(len==n)return ;
  64.  
  65. //若a元素不满n个,未被遍历过的点在a[]中寻找与其相连的点
  66. for(int y=;y<=n;y++)
  67. {
  68. if(v[y]==false)
  69. {
  70. bool bk=false;
  71. for(int i=;i<len;i++)
  72. {
  73. if(mp[a[i]][y]==true)//相当于把a[i]~a[i+1]之间的连接断开,然后把a[i]和y连起来
  74. {
  75. st=a[i+];ed=y;
  76. reverse(,i);reverse(i+,len);
  77. v[y]=true;a[++len]=y;
  78. bk=true;break;
  79. }
  80. }
  81. if(bk==true)break;
  82. }
  83. }
  84. }
  85. }
  86. int main()
  87. {
  88. scanf("%d%d",&n,&m);
  89.  
  90. int x,y;
  91. memset(mp,false,sizeof(mp));
  92. for(int i=;i<=m;i++)
  93. {
  94. scanf("%d%d",&x,&y);
  95. mp[x][y]=true;mp[y][x]=true;
  96. }
  97.  
  98. len=;memset(a,,sizeof(a));
  99. memset(v,false,sizeof(v));
  100. hamilton();
  101.  
  102. for(int i=;i<len;i++)printf("%d ",a[i]);
  103. printf("%d\n",a[len]);
  104. return ;
  105. }

caioj1230: [图论补充]哈密顿路径的更多相关文章

  1. 【Codeforces】【图论】【数量】【哈密顿路径】Fake bullions (CodeForces - 804F)

    题意 有n个黑帮(gang),每个黑帮有siz[i]个人,黑帮与黑帮之间有有向边,并形成了一个竞赛完全图(即去除方向后正好为一个无向完全图).在很多年前,有一些人参与了一次大型抢劫,参与抢劫的人都获得 ...

  2. [转] POJ图论入门

    最短路问题此类问题类型不多,变形较少 POJ 2449 Remmarguts' Date(中等)http://acm.pku.edu.cn/JudgeOnline/problem?id=2449题意: ...

  3. 图论4——探索网络流的足迹:Dinic算法

    1. 网络流:定义与简析 1.1 网络流是什么? 网络流是一种"类比水流的解决问题方法,与线性规划密切相关"(语出百度百科). 其实,在信息学竞赛中,简单的网络流并不需要太高深的数 ...

  4. 数据结构&图论:K短路-可持久化可并堆

    本来A*就可以搞定的题,为了怕以后卡复杂度,找了个这么个方法 现阶段水平不够就不补充算法分析部分了 对于图G,建立一个以终点t为起点的最短路径构成的最短路径树 (就是反着跑一遍最短路,然后对于一个不为 ...

  5. [OI笔记]基础图论/图算法

    [2017.8.29 00:00]--前几天开始好好学了几天的图论,不过这最近又突然因为一些原因(其实是晚上没睡好导致白天没精神)颓废了几天-一方面为了控制自己同时也可以当做之后noip前复习用的笔记 ...

  6. <JVM下篇:性能监控与调优篇>补充:浅堆深堆与内存泄露

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  7. ACM - 图论 - P3385 负环

    P3385 负环 题目描述 给定一个 \(n\) 个点的有向图,请求出图中是否存在从顶点 \(1\) 出发能到达的负环. 负环的定义是:一条边权之和为负数的回路. 输入格式 本题单测试点有多组测试数据 ...

  8. MVC Core 网站开发(Ninesky) 2.1、栏目的前台显示(补充)

    在2.1.栏目的前台显示中因右键没有添加视图把微软给鄙视了一下,后来有仔细研究了一下发现应该鄙视自己,其实这个功能是有的,是自己没搞清楚乱吐糟. 其实只要在NuGet中安装两个包(Microsoft. ...

  9. RabbitMq应用一的补充(RabbitMQ的应用场景)

    直接进入正题. 一.异步处理 场景:发送手机验证码,邮件 传统古老处理方式如下图 这个流程,全部在主线程完成,注册->入库->发送邮件->发送短信,由于都在主线程,所以要等待每一步完 ...

随机推荐

  1. 实验:iscsi共享存储

    实验名称: iscsi共享存储 实验环境: 我们需要准备一个磁盘,对于这个磁盘我们需要使用,将这个磁盘空间共享给iscsi客户端: 实验需求: 我们这里使用两台服务器来实现iscsi共享存储: 1.指 ...

  2. linux find的用法

    ①.一般格式: ·find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \; 说明: #-print 将查找到的文 ...

  3. Centos7 中Nginx的安装与配置

    安装与配置 1.安装nginx yum intsall nginxsudo systemctl start nginx 启动服务sudo firewall-cmd --permanent --zone ...

  4. CactiI表结构和数据被动获取

    cacti我们也用了很久了,但是它的表结构一直都没有去关心过,得空抽了半个晚上的时间,把它的库表结构大概看了下,某些字段的含义跟大家分享下:cacti的数据都是存放在rrdtool中的,数据库存放的其 ...

  5. Codeforces Round #386 (Div. 2) A+B+C+D!

    A. Compote 水题(数据范围小都是水题),按照比例找最小的就行了,3min水过. int main() { int a,b,c; while(~scanf("%d%d%d" ...

  6. C. The Smallest String Concatenation-C++sort排序~~

    C. The Smallest String Concatenation time limit per test 3 seconds memory limit per test 256 megabyt ...

  7. [luoguP2948] [USACO09OPEN]滑雪课Ski Lessons(DP)

    传送门 f[i][j]表示i时刻能力值为j的最大滑雪数 显然f[0][1]=0,开始搜索 三种转移: ①美美的喝上一杯**:f[i+1][j]=max(f[i+1][j],f[i][j]) ②滑雪,f ...

  8. [luoguP1947] 笨笨当粉刷匠_NOI导刊2011提高(10)(DP)

    传送门 f[i][j][k]表示前i行,最后一行前j个,选k次最优解 ntr[i][j][2]表示当前行区间i~j涂0或1所能刷的正确格子 #include <cstdio> #defin ...

  9. [POJ2352] Stars(树状数组)

    传送门 先按照下标x排序,然后依次把y加入树状数组,边加入边统计即可. 注意下标re从零开始,需+1s ——代码 # include <iostream> # include <cs ...

  10. BZOJ2196: [Usaco2011 Mar]Brownie Slicing

    n<=500 * m<=500的方阵,先沿横坐标切A-1刀,再把每一块切B-1刀,得到A*B块,求这A*B块的数字之和的最小值的最大值. 最小值最大--二分,然后贪心切.每次扫一行,看这一 ...