尤拉迴路,尤拉路

2021-06-28 11:42:18 字數 3220 閱讀 4556

參考以上:

判斷尤拉路,尤拉迴路:

注意圖聯通,可以dfs

或者並查集

一.無向圖

尤拉迴路:每個頂點度數都是偶數

尤拉路:所有點度數為偶數,或者只有2

個點度數為奇數

二.有向圖(非混合)

尤拉迴路:每個頂點入度等於出度

尤拉路:每個頂點入度等於出度;

或者只有1

個點入度比出度小

1, 從這點出發,只有

1個點出度比入度小

1,從這個點結束,其他點入度等於出度

三.混合圖(有的邊單向,有的邊不確定方向)

尤拉迴路:

判斷乙個圖中是否存在尤拉迴路(每條邊恰好只走一次,並能回到出發點的路徑),在以下三種情況中有三種不同的演算法:

一、無向圖

每個頂點的度數都是偶數,則存在尤拉迴路。

二、有向圖(所有邊都是單向的)

每個節頂點的入度都等於出度,則存在尤拉迴路。

尤拉路:

首先判斷底圖是否聯通;

然後,給不定向邊 隨便給定方向,考慮每個點的出度和入度:

1)如果入度和出度之差 都是偶數,說明如果存在尤拉路,則一定是尤拉迴路,解法同上;

2)如果可以找到乙個且僅乙個點st

,入度比出度 小奇數,乙個出度比入度小奇數的點ed

,則加無向邊

(st,

ed), 

轉為混合圖尤拉迴路問題

另外,一般關於尤拉路的題,邊數都比較少,如果要求字典序最小,則可以直接存邊,排序後,每次dfs

,先走小的,這樣記錄結束順序,倒敘輸出,就是字典序最小的。因為倒敘輸出,先遍歷到的點會先輸出。

混合圖尤拉迴路  相關題目:pku1637,zju1992,hdu3472

混合圖尤拉迴路用的是網路流。

把該圖的無向邊隨便定向,計算每個點的入度和出度。如果有某個點出入度之差為奇數,那麼肯定不存在尤拉迴路。因為尤拉迴路要求每點入度 = 出度,也就是總度數為偶數,存在奇數度點必不能有尤拉迴路。

好了,現在每個點入度和出度之差均為偶數。那麼將這個偶數除以2,得x。也就是說,對於每乙個點,只要將x條邊改變方向(入》出就是變入,出》入就是變出),就能保證出 = 入。如果每個點都是出 = 入,那麼很明顯,該圖就存在尤拉迴路。

現在的問題就變成了:我該改變哪些邊,可以讓每個點出 = 入?構造網路流模型。首先,有向邊是不能改變方向的,要之無用,刪。一開始不是把無向邊定向了嗎?定的是什麼向,就把網路構建成什麼樣,邊長容量上限1。另新建s和t。對於入 > 出的點u,連線邊(u, t)、容量為x,對於出 > 入的點v,連線邊(s, v),容量為x(注意對不同的點x不同)。之後,察看是否有滿流的分配。有就是能有尤拉迴路,沒有就是沒有。尤拉迴路是哪個?

檢視流值分配,將所有流量非 0(上限是1,流值不是0就是1)的邊反向,就能得到每點入度 = 出度的尤拉圖。

由於是滿流,所以每個入 > 出的點,都有x條邊進來,將這些進來的邊反向,ok,入 = 出了。對於出 > 入的點亦然。那麼,沒和s、t連線的點怎麼辦?和s連線的條件是出 > 入,和t連線的條件是入 > 出,那麼這個既沒和s也沒和t連線的點,自然早在開始就已經滿足入 = 出了。那麼在網路流過程中,這些點屬於「中間點」。我們知道中間點流量不允許有累積的,這樣,進去多少就出來多少,反向之後,自然仍保持平衡。

所以,就這樣,混合圖尤拉迴路問題,解了。

1 hdu 3018 ant trip

一筆畫問題,無向圖尤拉路或者尤拉迴路,注意題目說了,如果是孤立點,則不用考慮。

對於每個連通塊,如果全都是偶數度,則需要1

筆;如果不是,則需要奇數度頂點個數的

1/2筆。   我用並查集寫的。

2 poj 1041 john's trip

題目給了乙個圖,街道編號1..n(n<1995), 

點編號1..m(m<44),

求尤拉迴路

且字典序最小

關於字典序最小,每次dfs

,先走最小的,這樣倒敘輸出時 先

dfs到的先輸出

比較好的是實現是 直接按編號存邊,dfs 

記錄結束序,倒敘輸出

fill() [1,m] 忘加1了,

wa了幾次

3 poj 1386 play on words

貌似很經典的模型了,應該叫 單詞接龍吧。

本題要求判斷是否有 有向圖尤拉路

4 poj 2230 watch cow

題目描述每條路必須走兩次,且方向不同,其實一樣了,有向圖的尤拉迴路

不過需要輸出的是路徑中的節點。

[cpp]view plain

copy

void

dfs(

intu)   

}  }  

5 poj 2513 colored sticks

比較簡單,判定是否存在 無向圖尤拉路

6 poj 2337 catenyms

還是單詞 首尾相連,要求判斷,然後輸出字典序最小的

有向圖尤拉路,字典序最小,把單詞按照字典序排序,優先dfs

小的,記錄結束序,倒敘輸出即可。

沒寫break

,查了好久

7 poj 1392 ouroboros snake

這裡涉及到debruijin圖,即當k=3 

時,我們構造乙個0,

1構成的環,長度為 

2^k,其中,任意的連續的長度為

k個的,會組成0,

2^k-1

的所有的數字剛好一次,而且要求換的字典序最小。   這裡關鍵就是建圖了,取

k-1長度的串,一共有

2^(k-1)

個作為點,如果我們把這個串左移

,末尾加1或0

,可以得到新的節點,則連有向邊,共有

2^k條邊,求尤拉迴路,字典序最小即可。

本題要求 按順序輸出 組成的數字。

8 hdu 2894 debruijin

同上,這次要輸出串

郵遞員問題   poj2040 poj2404

哈密頓迴路   poj2439 poj2288 poj1392 hdu2894

hdu3018

1116

2894

1956

3472

尤拉路 尤拉迴路

1 尤拉路 在乙個連通圖中存在一條路,經過途中所有邊一次且僅一次,這條路叫做尤拉路。2 尤拉迴路 在乙個連通圖中存在一條路,經過途中所有邊一次且僅一次,出發點亦是終點,這樣的路是尤拉迴路。1 無向圖有一條尤拉路 圖是連通的,且全部的結點的度是偶數 就是尤拉迴路的情況 或只有兩個結點的度是奇數。2 無...

尤拉路和尤拉迴路

尤拉環 圖中經過每條邊一次且僅一次的環 尤拉路徑 圖中經過每條邊一次且僅一次的路徑 尤拉圖 有至少乙個尤拉環的圖 半尤拉圖 沒有尤拉環,但有至少一條尤拉路徑的圖。無向圖 乙個無向圖是尤拉圖當且僅當該圖是連通的 注意,不考慮圖中度為0的點,因為它們的存在對於圖中是否存在尤拉環 尤拉路徑沒有影響 且所有...

尤拉路和尤拉迴路

尤拉路 尤拉路是指從圖中任意乙個點開始到圖中任意乙個點結束的路徑,並且圖中每條邊通過的且只通過一次。1.無向連通圖存在尤拉路的條件 所有點度都是偶數,或者恰好有兩個點度是奇數,則有尤拉路。若有奇數點度,則奇數點度點一定是尤拉路的起點和終點,否則可取任意一點作為起點。2.有向連通圖存在尤拉路的條件 滿...