关闭

欧拉回路(Euler Circuits)

1147人阅读 评论(0) 收藏 举报
分类:

首先介绍一下什么是欧拉回路,这个是一个图问题,也就是说假设我们拿着一只笔,在纸上画一个图,在这个期间笔不能离开纸,同时每一个边只能画一次。也就是人们常说的一笔完成。如下面例子所示


图a,图b可以一笔画出来,而图c不可以。欧拉回路就是研究这个问题:什么样的图能够一笔画成。

我先先来分析上面的图a,可以发现对于图a,虽然可以一笔画成,但是却无法在结束时回到最初的起始点,也就是说假设我们从左下角的点开始画,那么完成这个图形时,笔尖一定是在右下角的点上。

而对于图b,我们发现结束后,笔尖一定会回到最初的起点。

这是一个很有趣的现象,下面我们通过引入一个度的概念来解决这个问题。

度:在无向图中,表示点的边的个数。例如图a中左下角的点的度为3,图b中左下角的点的度为4.

下面我们引入Euler Circuits定理:

a) 如果一个图是连通图(connected),并且每一个点的度都为偶数,那么这个图一定可以一笔画成,同时最终点就是起始点。

b) 如果一个图是连通图(connected),但是有且只有两个点的度为奇数,那么图一定可以一笔画成,但是最终点不是起始点。

c) 如果一个图是连通图(connected),但是一个点的度为奇数或者超过两个点的度为奇数,那么图一定不可以一笔画成。


对于每个点来说,可以进入,可以出去,但是当一个点的度为奇数时,它就只能进入而不能出去了,因此对于C中的情况,是无法一笔画成一个图的;而对于b中的情况,因为只有两个度为奇数的点,因此必有一个点为起始点,一个点为终点,也就是说一个点出去,一个点进去,然后结束不在出来。


下面来看一个比较复杂的例子,怎样找到它的欧拉回路的访问方式。


这个图毫无疑问是有欧拉回路的,因为每个点的度均为偶数。

首先我们随意找到一个点,然后深度遍历,假设为5,4,3,2,8,9,10,5, 那么得到下面的图


然后我们再随意找到一个点,然后深度遍历,假设为4,1,3,6,9,12,10,11,4, 那么得到下面的图


然后我们再随意找到一个点,然后深度遍历,假设为3,9,7,3; 

然后我们再随意找到一个点,然后深度遍历,假设为4,7,10,4; 

那么得到下面的图,遍历完成


下面我们要将上面的路径合并成一条路径:

5,4,3,2,8,9,10,5

4,1,3,6,9,12,10,11,4

3,9,7,3

4,7,10,4; 

合并前两个,得到5,4,1,3,6,9,12,10,11,4,3,2,8,9,10,5

在合并第三个,得到5,4,1,3,9,7,3,6,9,12,10,11,4,3,2,8,9,10,5

合并第四个得到5,4,7,10,4,1,3,9,7,3,6,9,12,10,11,4,3,2,8,9,10,5


0
0
查看评论

欧拉回路(Euler Circuit)

定义:若一副图中从某个顶点A走出,经过图中的所有的边,且每条边只经过一次,则称这个环为欧拉回路,如果某幅图含有这样的环,则这幅图叫做欧拉图。 如何判断一幅图是不是欧拉图,也即一幅图中是否含有欧拉回路。 如果一幅图中所有顶点的出度等于入度,且此图为强连通图,则此图含有欧拉回路,这幅图为欧拉...
  • shaya118
  • shaya118
  • 2014-12-09 23:15
  • 1612

图论欧拉回路初步 & BZOJ2095 POI2010 Bridges

图论欧拉回路初步 & BZOJ2095 POI2010 Bridges
  • Kanosword
  • Kanosword
  • 2016-10-11 15:00
  • 972

DFS应用——寻找欧拉回路

【0】README0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在 理解 “DFS应用——寻找欧拉回路” 的idea 并用源代码加以实现 (源代码,我还没有找到一种有效的数据结构和DFS进行结合,往后会po出); 【1】欧拉回路1.1)欧拉回路定义:我们必须在图中找出一条路径, 使...
  • PacosonSWJTU
  • PacosonSWJTU
  • 2015-11-24 08:16
  • 1401

算法之----欧拉回路,欧拉通路,半欧拉图

若图G中存在这样一条路径,使得它恰通过G中每条边一次,则称该路径为欧拉路径。若该路径是一个圈,则称为欧拉(Euler)回路。 (用于连通判断)DFS(Depth-First-Search)深度优先搜索算法,是搜索算法的一种。下图是一个无向图,如果我们从A点发起深度优先搜索(以下的访问次序并不是唯一...
  • nameix
  • nameix
  • 2016-08-23 14:37
  • 2118

基于DFS的求欧拉回路算法

1、拓扑排序 KAHN算法实现: 设一个有向图,存在一个入度=0,并有出度的点; **遍历所有点的出度和入度,找到入度为0的点,显示该点 **并且去掉图中有关该点的狐 **重复上述两个操作 执行过程中出现的情况: **找不到入度=0的点;所有点都输出了。这个输出的序列就是拓扑序列 **找不到入度...
  • u013755250
  • u013755250
  • 2016-03-26 21:32
  • 1574

图论的遍历 之 欧拉回路

图G的一个回路,若它通过G的meiyitioa
  • u013573047
  • u013573047
  • 2014-05-06 09:57
  • 1079

Crazy Circuits (hdu 3157 流量有上下限的最小流)

题意:有两个正负极n个节点和m个元件,每个元件告诉端点是接在哪个节点上的,并且每个元件有工作的最小电流限制,问使所有元件工作的满足条件的最小电流是多少。 思路:题目中已经有了源点S和汇点T,再添加附加源点SS和汇点TT,原图中的边的容量为INF(因为没有上限),若in[i]>0则SS向i连边容...
  • u014422052
  • u014422052
  • 2015-08-26 16:58
  • 854

Fleury算法求欧拉回路(二)

上一篇文章当中介绍了Fleury算法是什么以及算法流程,本篇文章将介绍如何用代码来实现求解欧拉回路。
  • p011235
  • p011235
  • 2015-09-28 15:03
  • 1371

POJ 1300 判断是否存在欧拉回路(包含定理)

题目描述: 你是一座大庄园的管家。庄园有很多房间,编号为0、1、2、3,...。你的主人是一个心不在 焉的人,经常沿着走廊随意地把房间的门打开。多年来,你掌握了一个诀窍:沿着一个通道,穿 过这些大房间,并把房门关上。你的问题是能否找到一条路径经过所有开着门的房间,并使得: 1) 通过门后立即把门关上...
  • u011466175
  • u011466175
  • 2014-01-27 23:34
  • 1162

图论 欧拉回路 之 哥尼斯堡的“七桥问题”

题目描述 哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示。 可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707—1783)最终解决了这个问题,并由此创立了拓扑学。 这个问题如今可以描...
  • ESESZB
  • ESESZB
  • 2016-07-24 13:20
  • 854
    个人资料
    • 访问:266411次
    • 积分:2713
    • 等级:
    • 排名:第15732名
    • 原创:68篇
    • 转载:7篇
    • 译文:0篇
    • 评论:52条
    文章分类
    最新评论