图论的起源:柯尼斯堡七桥(一笔画)问题与欧拉路径/回路

柯尼斯堡七桥问题

大数学家欧拉一生中的大部分时间在俄国和普鲁士度过。1735年,他提出了著名的柯尼斯堡七桥(Seven Bridges of Königsberg)问题:

东普鲁士柯尼斯堡(今俄罗斯加里宁格勒)的市区横跨普雷格尔河两岸,河中心有两个小岛,小岛与河的两岸有七座桥连接。在所有桥都只能走一遍的前提下,如何才能把这个地方所有的桥都走遍?

当时欧拉并没有找到这个问题的解。第二年,他证明了不存在符合条件的走法。在论文中,欧拉将柯尼斯堡的实际情况抽象成了二维空间上点与线的组合,桥可以视为线(边),桥连接的陆地视为点(顶点)——这就是数学中图论思维的起源。

如上,柯尼斯堡七桥问题就被推广为“一笔画”问题:

对于一个给定的图,怎样判断是否存在一个恰好包含了所有的边,并且没有重复边的路径?

背景铺垫完了,下面介绍相关的概念和定理。

欧拉图、欧拉路径/回路

在图论中:

  • 如果在一张图(有向图或无向图)上能够不重复地遍历完所有的边,那么此图就称为欧拉图(Eulerian graph)。
  • 能够不重复地遍历完所有的边的路径——即一笔画的“笔画”,称为欧拉路径(Eulerian path)。
  • 特别地,如果上述路径的起点与终点相同,则称为欧拉回路(Eulerian circuit)。

如下gif所示的图就是欧拉图,存在一个欧拉路径。

下图是一笔画成的“串”字,也就是说烧烤店门口挂的这个字可以用单条LED灯带做成。

那么柯尼斯堡七桥问题为什么不能“一笔画”呢?来看看欧拉提出的定理。

图论中的欧拉定理(一笔画定理)

欧拉同时考虑到了有向图与无向图的情况,因此要分别讨论。

无向图的情况

定理:

连通无向图G有欧拉路径的充要条件为:G中奇度顶点(即与其相连的边数目为奇数的顶点)有0个或者2个。

证明:

  • 必要性
    如果图能够被一笔画成,那么对每个顶点,考虑路径中“进入”它的边数与“离开”它的边数[注意前提是无向图,所以我们不能称其为“入边”和“出边”]。很显然这两个值要么相同(说明该顶点度数为偶),要么相差1(说明该顶点度数为奇)。
    也就是说,如果欧拉路径不是回路,奇度顶点就有2个,即路径的起点和终点;如果是欧拉回路,起点与终点重合,则不存在奇度顶点。必要性得证。

  • 充分性

    • 如果图中没有奇度顶点,那么在G中随机取一个顶点v0出发,尝试构造一条回路c0。如果c0就是原图,则结束;如果不是,那么由于图是连通的,c0和图的剩余部分必然存在某公共顶点v1,从v1出发重复尝试构造回路,最终可将整张图分割为多个回路。由于两条相连的回路可以视为一条回路,所以该图必存在欧拉回路。
    • 如果图中有2个奇度顶点u和v,那么若是加一条边将u和v连接起来的话,就得到一个没有奇度顶点的连通图,由上文可知该图必存在欧拉回路,去掉这条新加的边,就是一条以u和v为起终点的欧拉路径。充分性得证。

可知,柯尼斯堡七桥问题中的图有4个奇度顶点(1个度数为5,3个度数为3),所以不存在欧拉路径。

有向图的情况

定理:

底图连通的有向图G有欧拉路径的充要条件为:G的所有顶点入度和出度都相等;或者只有两个顶点的入度和出度不相等,且其中一个顶点的出度与入度之差为1,另一个顶点的入度与出度之差为1。

显然,可以通过与无向图情况相似的思路来证明,过程略去。

欧拉定理介绍完了,那么如何找到具体的路径呢?

寻找欧拉路径/回路——套圈法

首先,我们当然要判断图的连通性,非连通图是不存在欧拉路径/回路的。判断图的连通性可以通过传统的DFS和BFS方法,也可以通过之前讲过的并查集实现,另外还有基于传递闭包的Floyd-Warshall算法(没错就是求最短路的那个),不再赘述。

如果图是连通的,我们再遍历每个顶点的度(有向图就是入度和出度),根据欧拉定理即可轻松地判断图中是否欧拉路径/回路。如果是欧拉路径的话,还能顺便找出路径的起点和终点。

接下来,我们通过俗称“套圈法”的DFS思路来寻找欧拉路径/回路。

参考欧拉定理充分性的证明过程,欧拉图可以分割为多个相交的回路,所以我们可以从起点开始,通过DFS逐渐扩展路径,并标记边已经被遍历过(根据定义,已经被标记了的边之后就不会再走),直到形成一个回路。然后回溯到上一个有边没被遍历到的顶点——就是上文说的“c0和图的剩余部分必然存在某公共顶点v1”,以它为起点重复同样的操作,直到所有回路都被找出来。在回溯阶段所记录的路径就是所求的欧拉路径/回路。

听起来似乎有些混乱,来看一道例题吧。

例题——POJ 2337 «Catenyms»

传送门见这里

题目大意:给定N个单词,要求把这些单词不重复地排成一个序列,使每个单词的首字母与前一个单词的末尾字母相同(e.g. aloha.aloha.arachnid.dog.gopher.rat.tiger),以点号分隔输出。如果存在不止一个解,输出字典序最小的那个序列。如果没有解,输出三个星号。

我们可以将每个单词的两端视为顶点,单词本身视为有向边,就能构造出有向图。先判断连通性,再判断是否存在欧拉路径/回路(同时找出起点),最后用套圈法找出具体的路径——由于DFS回溯得到的路径是倒序的,所以把它们放在栈中记录比较方便。

本题需要特别注意的点在于输出字典序最小的那个序列,因此先要将所有单词按字典序排序。另外,如果存在的是欧拉回路,那么得选择字典序最小的单词作为起点。

今天时间不太够了,AC代码之后再补上,看官可参考其他大佬的代码,或移步Discuss区。

The End

寻找欧拉路径/回路也可以使用Fleury算法,但是它要额外检测图中的桥边,相比DFS而言不太容易操作。看官可以参考图论或离散数学教材获取更多细节。

民那晚安。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容