一个流行的游戏是用铅笔画这些图,但是图中的每一条边都只能被画一次,在画图过程中铅笔不能离开纸面。难度更高的问题是,不光要一笔画完图,并且起点和终点还要落在同一处。如果我们将上面的三个图形都看作图数据结构,那么这个画图问题就是一个图论问题。

如果在一个无向图中,找到一条路径,使得每一条边都被访问并且只被访问一次,那么这条路径就称为欧拉路径。如果起点与终点一致就成为欧拉回路,否则就是欧拉环游

我们能想到的第一个特性是,如果一个无向图要具有欧拉回路,那么图必须是连通的并且图中的每一个顶点的入度都必须是偶数 。这是因为,如果图不连通,那么就肯定有顶点无法被访问到;如果顶点的入度不为偶数,那么就会存在从一条边进入该顶点但无法再从该条边出来,这样就会永远停留在该顶点,也就不存在欧拉回路。如果刚好有两个顶点的入度为奇数,那么就可能存在一条从一个顶点出发,最终回到另一个顶点的欧拉环游,但是必须只有两个顶点的入度为奇数,如果多于两个顶点,那么欧拉环游也是不存在的。

事实上,一个无向图存在欧拉回路的充分必要条件就是:图是连通的并且所有顶点的度都为偶数。并且我们还可以通过一个线性时间的算法来找到这一条路径,此时基本的算法就是深度优先搜索。

深度优先搜索的主要问题在于,我们有可能只访问了部分节点而提前返回起点。解决这个问题的办法是,将访问过的边删掉之后,从剩余图中尚未访问的边的路径上的第一个节点开始再进行深度优先搜索,直到所有边都被遍历一次。

对于上图,首先找到路径,并删除边和节点:

 接下来选择4节点,并开始深度优先搜索,找到路径 ,将其拼接到最初的路径中

接下来从节点3开始,找到路径 ,并将其拼接到上面的路径中

最后将路径拼接到路径中

,就得到了完整的欧拉回路。

这个算法的时间复杂度是,因为它遍历了一边所有的边,并且遍历了常数遍顶点。

欧拉路径(欧拉环游、欧拉回路)相关推荐

  1. fleury求欧拉环游算法 matlab,Fleury算法求欧拉路径

    分析: 小Ho:这种简单的谜题就交给我吧! 小Hi:真的没问题么? <10分钟过去> 小Ho:啊啊啊啊啊!搞不定啊!!!骨牌数量一多就乱了. 小Hi:哎,我就知道你会遇到问题. 小Ho:小 ...

  2. Fleury算法找欧拉环游

    算法思路 任意选择一个顶点v0v0v_0, 假设已经确定好了前面的路径了.在剩下的边中选一个新的边 这个新的边需要跟它前面的那个点要相关联 除非没有点可以选,否则不能是剩余子图的割边. 一直到等这个步 ...

  3. 欧拉通路 java,欧拉回路

    基本概念及定理 1. 欧拉通路.欧拉回路.欧拉图 无向图: 1) 设G是连通无向图,则称经过G的每条边一次并且仅一次的路径为欧拉通路: 2) 如果欧拉通路是回路(起点和终点是同一个顶点),则称此回路为 ...

  4. 欧拉道路 和 欧拉回路

    经典的七桥问题:是否存在一条路线,可以不重复的走遍7座桥. 转化为图就是,是否存在一条路线,可以不重复地走遍所有边. 所以在欧拉道路中,"进"和"出"是相对应的 ...

  5. 欧拉图(欧拉回路与欧拉通路)

    在一个图中(有向图或无向图),如果能够从一个结点出发一次性通过所有边且每条边只能通过一次,在通过所有边后能够回到出发点,则该回路称为该图的欧拉回路:不能回到出发点,则该通路称为欧拉通路.含有欧拉回路的 ...

  6. NYOJ-99 单词拼接(欧拉+回溯)

    单词拼接 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描述 给你一些单词,请你判断能否把它们首尾串起来串成一串. 前一个单词的结尾应该与下一个单词的道字母相同. 如 alo ...

  7. 【HDU - 1116】【POJ - 1386】Play on Words(判断半欧拉图,欧拉通路)

    题干: Some of the secret doors contain a very interesting word puzzle. The team of archaeologists has ...

  8. 欧拉路和欧拉回路知识

    概念 如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径(Euler path). 如果一个回路是欧拉路径,则称为欧拉回路(Euler circuit). [1] 具有欧拉回路的图称为欧拉图 ...

  9. UVA 10129 Play on Words(欧拉道路)

    题意:给你n个字符串,问你是否可以出现一条链,保证链中每个字符串的第一个元素与上一个字符串的最后一个元素相同,注意可能重复出现同一个字符串 题解:以每一个字符串第一个元素指向最后一个元素形成一个有向图 ...

最新文章

  1. 网络和大数据成为重要文化生产力
  2. I2C,485,232,spi区别以半双工,全双工
  3. 【干货】从小米发布会看:雷军的七个产品思维
  4. 51单片机——My-Clock项目
  5. PHP使用Zend Opcache之优化加速和缓存清理总结
  6. 【数据结构与算法】之深入解析“路径总和”的求解思路与算法示例
  7. 《编程题》来自某游戏公司
  8. cache 简单理解
  9. Debit and Credit Memo
  10. matlab 正交特征向量,怎么对一个矩阵进行对称正交化?? matlab
  11. 《Python游戏趣味编程》 第10章 拼图游戏
  12. eclipse中导入jar包源文件
  13. ASP.NET Core 和 EF Core 系列教程——迁移
  14. [词汇] 十四、动词
  15. AWS、Azure等国外云计算如何迁移到国内阿里云上?
  16. 2014级学生程序设计学习大数据
  17. SX1278超时设置与计算
  18. lf模型下声门脉冲matlab程序,数字语音处理及MATLAB仿真.rar第二章
  19. ns-allinone-3.X(simulator模拟器)简单配置
  20. 一些有趣的资源搜索网站

热门文章

  1. Tether USDT 节点钱包的安装与使用-omni layer
  2. 解决报错OSError: dlopen(../anaconda/envs/python3/lib/python3.6/site-packages/lightgbm/lib_lightgbm.so)
  3. 跨模态学习能力再升级,EasyNLP 电商文图检索效果刷新 SOTA
  4. vc和MFC的详细历史
  5. Windows 10 1809和Office 2019下载(20190222更新)
  6. 围棋源代码android,围棋 深度学习 源代码
  7. spring和jump区别_Hop 及jump 的区别
  8. 互联网生态建设的切入方式——保险科技生态建设...
  9. 数据分析避坑指南-小白兔踩坑记
  10. HCIA-Routing Switching V2.5 PPT 总结