01 歐拉圖
(1)問題提出:
哥尼斯堡是18世紀東普魯士的一個城市,普雷格爾河流經過該市,將哥尼斯堡分為四個部分:兩岸和兩個河心島,河上共有7座橋將這些陸地相連。
問:游人從任一地點出發,怎樣才能做到穿過每座橋一次且僅一次后又返回到原出發地?
1736年歐拉(Euler)用圖論方法解決了“哥尼斯堡七橋問題”。
(2)轉化為圖論問題:
用節點表示陸地,用邊表示橋。在圖中尋找一條穿程於每條邊一次的回路。
(3)定義:
-
歐拉道路
設G是一個無向圖,包含G的每條邊的簡單道路稱為歐拉道路;(即:穿程於圖G的每條邊一次且僅一次的道路) -
歐拉回路
包含G的每條邊的簡單回路稱歐拉回路;(即:穿程於圖G的每條邊一次且僅一次的回路) -
歐拉圖
具有歐拉回路的圖稱為歐拉圖。
(4)歐拉道路和歐拉回路的判定:
- 定理:連通圖G是歐拉圖,當且僅當G不含奇數度節點。
note
:節點度是指和該節點相關聯的邊的條數,又稱關聯度。
- 證明
(4.1)必要性
因為:設G是歐拉圖,則存在一條包含每條邊的簡單回路C,當沿回路一個方向前進時,必定沿一條邊進入一個節點,再沿另一條邊從這個節點出去,即每個節點都和偶數條邊關聯。
所以:G中不含奇數度節點。
(4.2)充分性
設G的節點都是偶數度,則G含有回路。
假設C是其中一條包含G中邊數最多的簡單回路。
(1)若C包含了G中所有的邊,則C為歐拉回路,G是歐拉圖。結論成立。
(2)若C沒有包含G中所有的邊,則G-E(C)是刪邊子圖,仍然都是偶數度節點。在G-E(C)中必還有簡單回路,設為C_hat。
因為:G是連通的,C_hat和C至少會在某一點u連接,則由C和C_hat構造出G的一條包含邊數比C多的回路,與假設矛盾。
所以:G中包含邊數最多的回路必定是歐拉回路。
即不含奇數度節點的連通圖是歐拉圖。
note
:------------------充分必要條件------------------
假設A是條件,B是結論,設C、D分別為A、B所描述對象的集合,則有下列定義和推論:
- 由A可以推出B,由B可以推出A,則A是B的充分必要條件(此時C=D);
- 由A可以推出B,由B不可以推出A,則A是B的充分不必要條件(此時C⊂D);
- 由A不可以推出B,由B可以推出A,則A是B的必要不充分條件(此時D⊂C);
- 由A不可以推出B,由B不可以推出A,則A是B的既不充分也不必要條件(此時C∉D, D∉C);
(5)有向圖的歐拉回路和歐拉道路判定:
- 定理:
(1)連通有向圖G含有有向歐拉回路,當且僅當G中每個節點的入度等於出度。
(2)連通有向圖G含有有向歐拉道路,當且僅當G中最多有兩個節點入度不等於出度,這兩個節點中,一個節點的入度數比出度數大1,另一個節點的出度數比入度數大1。
(6)案例:
(6.1)判斷圖:
一個圖能一筆畫完回到起點 ↔ 該圖為歐拉圖
- 一個圖能從一點出發一筆畫完到另一個節點 ↔ 圖中存在一條歐拉道路
(6.2)應用舉例:
一個郵遞員從郵局出發,在其分管的投遞區域內走遍所有的街道把郵件送到每個收件人手中,最后又回到郵局,問怎樣走使全程的路徑最短?
分析:
(1)如果所作圖是歐拉圖,任何一條歐拉回路滿足條件;
(2)如果所作圖不是歐拉圖,尋找的閉圈道道路中必定會重復通過某些邊。
02 哈密頓圖
(1)問題提出:
Hamilton發明一種游戲,周游世界。用12面體的20個頂點代表世界上的20個城市,每條棱表示城市間的一條路線。
問:能否從任何一座城市出發,沿棱行走,通過每座城市一次且僅一次,最后又回到出發點?
(2)轉換為圖論問題:
判斷連通圖中是否存在一個包含全部節點的圈。
(3)定義:
-
哈密頓道路
設G是一個連通圖,若G中存在一條包含全部節點的基本道路,則稱這條道路為G的哈密頓道路。(即:穿程於G的每個節點一次且僅一次的道路) -
哈密頓回路
若G中存在一條包含全部節點的圈(基本回路),則稱這個圈為G的哈密頓回路(或哈密頓圈)。(即:穿程於G的每個節點一次且僅一次的回路) -
哈密頓圖
含有哈密頓圈的圖稱為哈密頓圖。
(4)判斷條件:
- 定理:
(4.1)必要條件:若G=(V,E) 是一個哈密爾頓圖,則對於V的每一個非空子集S,均有W(G-S) ≤|S|。其中|S|是S中的頂點數,W(G-S)表示圖G擦去屬於S中的頂點后,剩下子圖的連通分枝的個數。
(4.2)充分條件:設G=(V,E)是一個無向簡單圖,|V|=n. n≥3. 若對於任意的兩個頂點u,v∊V,d(u)+d(v) ≥n,那么, G是哈密爾頓圖。此條件由美國圖論數學家奧勒在1960年給出。
尋找哈密頓路徑是一個典型的NPC問題。后來人們也證明了,找一條哈密頓路的近似比為常數的近似算法也是NP完全的。
尋找哈密頓路的確定算法雖然很難有多項式時間的,但是這並不意味着只能進行時間復雜度為\(O(n×n!)\)暴力搜索。利用狀態壓縮動態規划,可以將時間復雜度降低到\(O(2^n×n^3)\)。