一笔画问题(欧拉图)

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一笔画问题(欧拉图)

————————————————————————————————作者:————————————————————————————————日期:

2010-10-18 17:32 by EricZhang(T2噬菌体), 3556 visits, 网摘, 收藏, 编辑

关于一笔画问题的数学分析(对一道面试题的总结与扩展思考)

摘要

前几天参加了一个公司的面试,其中被问到了一个题。面试官在纸上画了一个图形(具体图形见下文),问我能不能一笔画出这个图形,要求每条边必须只走一次,并且画的过程中笔不能离开纸。当时我没有试着去画,而是凭着自己图论方面的知识在几秒钟之内告诉面试官不可能做到,然后简单说了一下理由。面试结束后我翻阅了图论相关的资料,发现当时自己虽然给出了正确答案,但理由并不完全正确。昨天我花了几个小时仔细研究了一下相关的理论,总结了一下这类问题的类型和解法,写成此文,分享给大家。

问题的提出

当时面试官给我出的问题是这样的:对于下面这个图形,让我一笔画出,要求每条边必须只走一次,并且画的过程中笔不能离开纸。

面试时我给出的回答是不可能做到,面试结束后我也从数学上证明了这个这个回答。当然有兴趣的朋友可以试着画画看。

这个问题其实就是我们小时候会玩到的一笔画游戏。这类问题看似简单直观,但是仔细研究下来却蕴含了很多东西,而且涉及了图论中一个非常重要的研究课题——欧拉迹。而且这类问题可以扩展出很多东西,例如任意给一个图可不可以完成一笔画且最后回到起始点?再如到底什么样的图可以一笔画出来?什么样的图一笔画不出来?如果一个图可以一笔画出来,那么应该如何画?有没有对一切可一笔画图形的通用解法?

下面我们将这个问题抽象成一般问题,然后从图论角度寻找上述疑问的答案。

图论中的一些概念

因为在下文论述过程中需要用到一些图论的基本概念,为了照顾在这方面不熟悉的朋友,我先将要用到的定义和概念列出来,如果您对图论的基本内容已经了然于胸,可以跳过这一节。另外如不做特殊说明,下文所有的“图”都默认指“无向图”,本文的讨论不涉及“有向图”。

简单图——一个简单图可表示为G=(V, E),其中V是顶点集合,其中每个元素是图的一个顶点;E是边集合,其中每一个的元素是一个顶点对(a, b),其中a和b均属于V,这个顶点对表示顶点a和b 间有一条边相连。

多重图——简单图不允许同一组顶点对在E中出现两次,即一对顶点间最多只有一条边。如果在简单图的基础上允许任一组顶点对间有任意条边,则简单图变为多重图。

一般图——如果在多重图的基础上允许自关联边,即允许(a, a)这样的顶点对出现在E中,则这种图叫一般图。(我们后续所有讨论的对象都是一般图,如不做特殊说明,下文所有的“图”均指一般图)顶点的度——一个顶点的度是这个顶点所连接的边的条数。

连通图——如果一个图任意两个顶点之间都存在由边组成的通路,则这种图叫连通图。(我们后续所有讨论的对象都是连通图,如不做特殊说明,下文所有的“图”均指无向一般连通图)

途径——在一个图G中,{x1, x2}, {x2, x3}, …, {xm-1, xm}叫做G的一个途径,如果x1和xm为同一顶点,则说这个途径是闭的,否则说这个途径是开的。

迹——如果一个途径中没有重复的边,则这个途径叫做“迹”。

欧拉迹——如果图G的一个迹包含了G所有的边,则这个迹叫做“欧拉迹”。

一笔画问题的抽象

有了上面的定义,我们就可以用数学语言描述一笔画问题了:

所谓一笔画问题,就是给定一个无向一般连通图,这个图存在欧拉迹的充分必要条件是什么?如果存在欧拉迹,如何求欧拉迹?

这个问题很庞大,我们化整为零,分几步去讨论。另外,为了避免枯燥无味,我将不会从绝对严格的数理层面去做推理和证明,而是用一些直观的启发式方法,尽量让每位朋友都能读懂。

问题一:图G存在欧拉迹的必要条件是什么?

首先,我们来推导G存在欧拉迹的必要条件。虽然满足必要条件不能充分证明G一定存在欧拉迹,但是不满足必要条件就一定不存在欧拉迹。所以搞清这个问题,可以用来帮助我们判断出显然不能一笔画出的图。

欧拉迹分为开欧拉迹和闭欧拉迹,我们先讨论开欧拉迹的情况。

现已知图G存在开欧拉迹(等价于存在一笔画画法,并且这种画法在完成时不会回到起始顶点),那么可以推导出什么?

现在我们这样想:设{x1, x2}, {x2, x3}, …, {xm-1, xm}是G的一条开欧拉迹,那么{x1, x2, …, xm}是这条欧拉迹所经过的顶点的序列。需要注意,这里除了x1和xm一定不是同一顶点,其它很多顶点可能是相同的。因为欧拉迹只要求每个边出现且仅出现一次,但不限制同一顶点出现几次。例如下图:

其中{a, b}, {b, c}, {c, a}, {a, d}, {d, e}, {e, c}是一个开欧拉迹,顶点序列为{a, b, c, a,d, e, c}。

现在我们这么考虑这个问题,对于某一顶点x,I(x)表示欧拉迹中进入x的次数,即走整个欧拉迹过程中从x以外的顶点进入x顶点的次数,O(x),表示离开x的次数,即当前在x顶点,然后离开x到其它顶点的次数。

我们顺着开欧拉迹走,对于所有顶点此时I(x)和O(x)均为0,当前笔触在x1处。

当从x1走到x2,O(x1)变为1,而I(x2)变为1。我们可以想象,除起始顶点和终止顶点外,其它顶点当走完这个欧拉迹时,I(x)一定等于O(x),因为对于这些顶点,一次进入必然对应着一次离开。而起始顶点的不同在于,它多一次离开(第一步),所以I(x1)+1=O(x1),同理,终止顶点多一次进入(最后一步),I(xm)=O(xm)+1。

我们还体会到这样一个事实:对于任意顶点,每一个进入和每一个离开都消耗此顶点的一个度。因为欧拉迹不允许重复边,所以每一次进入和离开一定是走以前没有走过的边,因此顶点x的度为

I(x)+O(x)。这样可以得出结论:如果G存在一个开欧拉迹,那么起始顶点和终止顶点的度数为奇数,而其它顶点的度数为偶数。

再来考虑G存在闭欧拉迹的情况。根据上述思路,如果欧拉迹时闭的,则起始顶点和终止顶点为一个顶点,而这个顶点刚好多一个进入(最后),多一个离开(开始),这么一加,这个顶点的度也一定为偶数,其它顶点的度的推理与开欧拉迹相同。所以可以得出结论:如果G存在一个闭欧拉迹,那么G所有顶点的度均为偶数。

相关文档
最新文档