关闭

欧拉回路(Euler Circuits)

1068人阅读 评论(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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:245404次
    • 积分:2568
    • 等级:
    • 排名:第16077名
    • 原创:67篇
    • 转载:7篇
    • 译文:0篇
    • 评论:52条
    文章分类
    最新评论