歐拉迴路

歐拉迴路,就是由一點出發,每一條邊走且只走一次(頂點可以走多次)然後回到起點的路徑。

定義

若圖G中存在這樣一條路徑,使得它恰通過G中每條邊一次,則稱該路徑為歐拉路徑。若該路徑是一個圈,則稱為歐拉(Euler)迴路。

具有歐拉迴路的圖稱為歐拉圖(簡稱E圖)。具有歐拉路徑但不具有歐拉迴路的圖稱為半歐拉圖。

判斷

以下判斷基於此圖的基圖連通。

無向圖存在歐拉迴路的充要條件

一個無向圖存在歐拉迴路,若且唯若該圖所有頂點度數都為偶數,且該圖是連通圖。

有向圖存在歐拉迴路的充要條件

一個有向圖存在歐拉迴路,所有頂點的入度等於出度且該圖是連通圖。

混合圖存在歐拉迴路條件

要判斷一個混合圖G(V,E)(既有有向邊又有無向邊)是歐拉圖,方法如下:

假設有一張圖有向圖G',在不論方向的情況下它與G同構。並且G'包含了G的所有有向邊。那么如果存在一個圖G'使得G'存在歐拉迴路,那么G就存在歐拉迴路。

其思路就將混合圖轉換成有向圖判斷。實現的時候,我們使用網路流的模型。現任意構造一個G'。用Ii表示第i個點的入度,Oi表示第i個點的出度。如果存在一個點k,|Ok-Ik|mod 2=1,那么G不存在歐拉迴路。接下來則對於所有Ii>Oi的點從源點連到i一條容量為(Ii-Oi)/2的邊,對於所有Ii

解法

無向圖歐拉迴路解法

求歐拉迴路的一種解法

下面是無向圖的歐拉迴路輸出代碼:注意輸出的前提是已經判斷圖確實是歐拉迴路。

C語言代碼,不全,請不要直接貼上。

pascal代碼:

求無向圖的歐拉迴路(遞歸實現)

注意record中的點的排列是輸出的倒序,因此,如果要輸出歐拉路徑,需要將record倒過來輸出。

求歐拉迴路的思路:

循環的找到出發點。從某個節點開始,然後查出一個從這個出發回到這個點的環路徑。這種方法不保證每個邊都被遍歷。如果有某個點的邊沒有被遍歷就讓這個點為起點,這條邊為起始邊,把它和當前的環銜接上。這樣直至所有的邊都被遍歷。這樣,整個圖就被連線到一起了。

具體步驟:

1。如果此時與該點無相連的點,那么就加入路徑中

2。如果該點有相連的點,那么就加入佇列之中,遍歷這些點,直到沒有相連的點。

3。處理當前的點,刪除走過的這條邊,並在其相鄰的點上進行同樣的操作,並把刪除的點加入到路徑中去。

4。這個其實是個遞歸過程。

相關搜尋

熱門詞條

聯絡我們