下面介紹一下:“什么叫做歐拉回路?”。
歐拉回路:有一條路從開始的位置到結束的位置都是同一個位置,經過了所有的點且通過了所有的邊,通過的次數只能一次。比如著名的“哥尼斯堡七橋問題”
歐拉路:在歐拉回路的基礎上面改一個條件。就是有一條路使得從開始的位置到結束的位置不是一個位置。
總結:具有一條經過所有邊的簡單回路,稱歐拉回路,含歐拉回路的圖稱為歐拉圖;如果圖G中具有一條經過所有邊的簡單(非回路)路徑,稱歐拉路!
歐拉回路和歐拉路也有一個充分的判斷條件。
歐拉回路:每一個結點都是偶結點。歐拉路:存在兩個結點是奇結點。其余的是偶結點。
Fleury算法步驟如下:
1.任取Vo屬於V(G),令Po = Vo 2.設Pi = Voe1V1e2.....eiVi,
如果E(G)-{e1,e2,...ei}中沒有與Vi關聯的邊,則計算停止;否則按下述的條件從E(G)-{e1,e2,e3...ei}中任取一條邊ei+1;
(a)ei+1與vi相關聯。
(b)除非無別的邊可供選擇,否則ei+1不應該選擇Gi = G-{e1,e2,e3...ei}中的橋。
設ei+1=(Vi,Vi+1),把ei+1Vi+1加入Pi,
3.令i = i+1,返回2.
大致意思就是:
他先把圖形建立,隨便選擇開始點,把Vi的點對應的邊設置為ei+1,結束條件就是如果此時的這一點沒有關聯的邊的時候則算法結束(簡單的說就是存在可以找的到的一條歐拉回路的判斷條件。)。否則你隨便可以選擇哪一條邊走,選擇邊的時候,除非沒有別的邊可以提供你選擇,否則不要去選擇過橋。
以上就是他的計算方法,他的思路其實很簡單,采用的思想選擇含一點遞歸思想,就是不斷的選擇邊,當時在選擇邊的時候有一種邊叫做橋,在是不是選擇過橋的時候,加一點條件就可以了。
你走過的路度可以看作消失了,之后當你走到一個點的時候,你發現你沒有路可以走的時候,那么你之前走過的那條路就稱為橋。
當然我們知道了什么叫做橋。我們還應該明白什么時候我們要去過橋,什么時候我們不去過橋。
在此我們有一句口訣:“能不過橋,絕對不過橋。”
下面來一個圖,讓我們去看求一條簡單歐拉回路。
就是從1開始遍歷所有的點,然后回到原點,組成一個簡單的歐拉回路。
讓我們看一個很著名的選擇路徑的問題。
如圖是一個歐拉圖,某人用Fleury算法求這個圖中的歐拉回路是什么?
一個走了一些簡單回路 v1e1 --> v2e2 --> v3e3 --> v4e14 --> v9e10 --> v1e8 --> v8e8 --> v9e2之后,無法進行下去試着分析一下他在哪一步出現了問題?
原圖如下:
下面我借上面的走法去解釋一下:
首先就是V1e1
走V2e2
走V3e3
走V4e14
走V9e10
走V2e9
走V8e8
從上面我們可以看的出,就是最后的一次選擇路徑的時候,使得路由連通的變為不連通圖,所以那一條邊是“橋”。
整理下思路:
首先,我們知道存在開始點和未走的點的圖不連通了。也就是V1和V7,V6,V5的連通性是不連通的。因為他選擇的路徑是如下圖:
我們可以看到,存在一些點,未走過點,要想走完,就得一些邊走第二遍,所以這是明顯不可能。此時求得圖,也不是歐拉回路圖。
歐拉回路中,要求就是點可以過幾次,但是邊只能過一次,而且起點和終點在同一點。
所以我們在選擇邊的時候只要記得選擇的要求就可以了。
以上就是Fleury算法求歐拉回路的簡單過程。