因为相连的两个数字总是相同的,不妨我们只写一次,那么这个例子可以写成:3-2-4-3-5-1。6个数字刚好有5个间隙,每个间隙两边的数字由恰好对应了一块骨牌。

如果我们将每一个数字看作一个点,每一块骨牌看作一条边。你觉得是怎么样的呢?

小Ho:以这个例子来说的话,就是:

要把所有的骨牌连起来,也就是把所有的边都走一次。咦,这不是欧拉路问题么!

小Hi:没错,这问题其实就是一个欧拉路的问题,不过和上一次不一样的在于,这一次我们要找出一条欧拉路径。

小Ho:那我们应该如何来找一条路径呢?

小Hi:我们还是借用一下上次的例子吧

使用我们上一次证明欧拉路判定的方法,我们在这个例子中找到了2条路径:

L1: 4-5-2-3-6-5
L2: 2-4-1-2

假设我们栈S,记录我们每一次查找路径时的结点顺序。当我们找到L1时,栈S内的情况为:

S: 4 5 2 3 6 5 [Top]

此时我们一步一步出栈并将这些边删除。当我们到节点2时,我们发现节点2刚好是L1与L2的公共节点。并且L2满足走过其他边之后回到了节点2。如果我们在这个地方将L2先走一遍,再继续走L1不就刚好走过了所有边么。

而且在上一次的证明中我们知道,除了L1之外,其他的路径L2、L3...一定都满足起点与终点为同一个点。所以从任意一个公共节点出发一定有一条路径回到这个节点。

由此我们得到了一个算法:

  1. 在原图中找一个L1路径

  2. 从L1的终点往回回溯,依次将每个点出栈。并检查当前点是否还有其他没有经过的边。若存在则以当前点为起点,查找L2,并对L2的节点同样用栈记录重复该算法。

  3. 当L1中的点全部出栈后,算法结束。

在这里我们再来一个有3层的例子:

在这个例子中:

L1: 1-2-6-5-1
L2: 2-3-7-2
L3: 3-4-8-3

第一步时我们将L1压入栈S,同时我们用一个数组Path来记录我们出栈的顺序:

S: [1 2 6 5 1]
Path:

然后出栈到节点2时我们发现了2有其他路径,于是我们把2的另一条路径加入:

S: 1 [2 3 7 2]
Path: 1 5 6

此时L2已经走完,然后再开始弹出元素,直到我们发现3有其他路径,同样压入栈:

S: 1 2 [3 4 8 3]
Path: 1 5 6 2 7

之后依次弹出剩下的元素:

S:
Path: 1 5 6 2 7 3 8 4 3 2 1

此时的Path就正好是我们需要的欧拉路径。

小Ho:原来这样就能求出欧拉路,真是挺巧妙的。

小Hi:而且这个算法在实现时也有很巧妙的方法。因为DFS本身就是一个入栈出栈的过程,所以我们直接利用DFS的性质来实现栈,其伪代码如下:

DFS(u):While (u存在未被删除的边e(u,v))删除边e(u,v)DFS(v)EndPathSize ← PathSize + 1
 Path[ PathSize ] ← u

要注意,在DFS的时候,如果欧拉图当中存在奇数度的顶点,那么一定要从该顶点出发,如果没有,则任一点都行。。。。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;int n,m,edge[1001][1001],degree[1001];
int path[1001],len;void dfs(int u)
{for(int i = 1; i <= n; i++){if(edge[u][i] > 0){edge[u][i]--, edge[i][u]--;dfs(i);}}path[len++] = u;
}int main()
{   while(scanf("%d%d",&n,&m)!=EOF){int u,v;memset(edge,0,sizeof(edge));memset(degree,0,sizeof(degree));for(int i = 1; i <= m; i++){scanf("%d%d",&u,&v);edge[u][v]++, edge[v][u]++;degree[u]++, degree[v]++;}int k = 1;for(int i = 1; i <= n; i++){if(degree[i] % 2 == 1){k = i;break;}}len = 0;dfs(k);for(int i = len-1; i >= 0; i--)printf("%d ",path[i]);printf("\n");}return 0;
}
												

hihocder 1181 : 欧拉路·二相关推荐

  1. #1181 : 欧拉路·二(无向图的欧拉路)

    #1181 : 欧拉路·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其实是一块一块骨牌. ...

  2. [hihoCoder] 第五十周: 欧拉路·二

    题目1 : 欧拉路·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上一回中小Hi和小Ho控制着主角收集了分散在各个木桥上的道具,这些道具其实是一块一块骨牌. 主角 ...

  3. #1182 : 欧拉路·三(有向图的欧拉路)

    #1182 : 欧拉路·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho破解了一道又一道难题,终于来到了最后一关.只要打开眼前的宝箱就可以通关这个游戏了 ...

  4. 图论总结(欧拉路+Floyd所有结点最短+Bellman-Ford算法+SPFA+Dijsktra算法+Tarjan算法+最小生成树(prim+kruskal) )

    目录 欧拉路 判断欧拉路是否存在: ​​​​​​​ 最短路: Floyd算法 : ​​​​​​​​​​​​​​ Bellman-Ford: ​​​​​​​ Dijkstra 单源最短路 先附上例题: ...

  5. 离散数学实验报告 实验3 欧拉路的确定

    离散数学实验报告 实验3 欧拉路的确定 一.实验目的 理解欧拉图的概念,掌握欧拉通/回路的判定方法. 二.实验内容 输入一个无向简单图的邻接矩阵,判定该图是否含有欧拉通/回路.若有,请给出一条欧拉通/ ...

  6. 【原创】一笔画问题(欧拉路)

    一笔画问题(euler-circuit.cpp) 题目描述 对给定的一个无向图,判断能否一笔画出.若能,输出一笔画的先后顺序,否则输出"No Solution!" 所谓一笔画出,即 ...

  7. 图论--欧拉路,欧拉回路(小结)

    在题目中在慢慢细说概念 1.HDU - 3018 Ant Trip 题目大意:又N个村庄,M条道路.问须要走几次才干将全部的路遍历 解题思路:这题问的是有关欧拉路的判定 欧拉路就是每条边仅仅能走一次, ...

  8. 小A与欧拉路(牛客-树的直径)

    题解: 欧拉路:从图中任意一个点开始到图中任意一个点结束的路径,并且图中每条边只通过恰好一次 问你走完这树上所有的点最短路径是什么. 因为树是没有环的,所以你走到叶子结点的时候需要往回走,也就是再走一 ...

  9. 图论-欧拉路(UVA10054)(HDU1116)

    首先说一下定义: 欧拉路:从图中某点出发可以遍历全图,图中的每条边通过且只能通过一次. 欧拉回路:具有欧拉路性质且起点位置与终点位置相同. 主要问题就是一个图中是否存在欧拉路,和打印欧拉路路径. 先说 ...

最新文章

  1. 在VSCode中编写Kotlin/Java
  2. 06540计算机网络考试大纲,2020年自考06540计算机网络基本原理复习资料(7)
  3. 重构遗留代码(1):金牌大师
  4. 求二进制数中1的个数(转)
  5. 网易云课堂 html5,网易云课堂 HTML5 播放器样式调整
  6. cydia无法安装卸载插件_简单 用文件管理器干掉Cydia顽固插件源
  7. 小米手机刷机工具MiFlash
  8. win10系统怎么修复网络连接服务器失败怎么办,Win10网络重置后无法连接网络怎么办 网络重置后恢复网络方法教程...
  9. UE4制作多人大地型游戏的优化
  10. spectral学习记录
  11. 快速申请开通公众号门店小程序-微信小程序开发-视频教程7
  12. python_添加标签打标签
  13. 32位计算机多少位寻址,32位的cpu的寻址能力到底是多少?
  14. 李沐动手学深度学习_环境搭建
  15. C语言打印乘法口诀表
  16. artemis mq配置开机启动 (centos7)(artemis Init Script)
  17. UJN_c++_Contest4735
  18. uniapp获取手机网络状态和手机系统信息(如4g,wifi)
  19. mysql判断表是否为空_quot;他为什么对我这么好?”:一张测量表判断男生是否喜欢你!...
  20. hololens开发思路

热门文章

  1. 删除数据库所有表 序列号
  2. #翻译# 关于 Java 性能方面的 9 个谬论
  3. Linux 环境下/etc/profile和/etc/profile.d 的区别和用法!
  4. centos6下时间同步(ntp)操作
  5. jQuery图片翻转弹出动画特效
  6. 存储过程中同一语句多个聚合函数时 into 用法
  7. 【阿里云产品公测】大数据下精确快速搜索OpenSearch
  8. 大山深处,有一所希望学校
  9. new star program
  10. unilever workspace creating space