尤拉路:
如果給定無孤立結點圖g,若存在一條路,經過圖中每邊一次且僅一次,這條路稱為尤拉路;
如果給定無孤立結點圖g,若存在一條迴路,經過圖中每邊一次且僅一次,那麼該迴路稱為尤拉迴路。
存在尤拉迴路的圖,稱為尤拉圖。
一、 對於無向圖g,具有一條尤拉路,當且僅當g是連通的,且有零個或兩個奇數度結點。
且有零個奇數度結點,存在尤拉迴路;有兩個奇數度結點,存在尤拉路。
判斷無向圖g是否連通,可以從任意結點出發,進行深度優先遍歷,如果可以遍歷到所有點,也可以用並查集,判斷根節點的個數,
說明,圖g連通,否則,圖g不連通。
二 、對於有向圖g,具有一條單向尤拉路,當且僅當g是連通的,且每個結點入度等於出度,或者,
除兩個結點外,每個結點的入度等於出度,而這兩個結點滿足,乙個結點的入度比出度大1,
另乙個結點的入度比出度小1。
判斷有向圖g是否連通,可以某一結點出發,進行深度優先遍歷,如果存在一點作為初始結點
可以遍歷到所有點,說明,圖g連通,否則,圖g不連通。ps:
判斷尤拉路,尤拉迴路:
注意圖聯通,可以dfs或者並查集
一.無向圖
尤拉迴路:每個頂點度數都是偶數
尤拉路:所有點度數為偶數,或者只有2個點度數為奇數
二.有向圖(非混合)
尤拉迴路:每個頂點入度等於出度
尤拉路:每個頂點入度等於出度;
或者只有1個點入度比出度小1, 從這點出發,只有1個點出度比入度小1,從這個點結束,其他點入度等於出度
三.混合圖(有的邊單向,有的邊不確定方向)
尤拉迴路:
判斷乙個圖中是否存在尤拉迴路(每條邊恰好只走一次,並能回到出發點的路徑),在以下三種情況中有三種不同的演算法:
一、無向圖
每個頂點的度數都是偶數,則存在尤拉迴路。
二、有向圖(所有邊都是單向的)
每個節頂點的入度都等於出度,則存在尤拉迴路。
尤拉路:
首先判斷底圖是否聯通;
然後,給不定向邊 隨便給定方向,考慮每個點的出度和入度:
1)如果入度和出度之差 都是偶數,說明如果存在尤拉路,則一定是尤拉迴路,解法同上;
2)如果可以找到乙個且僅乙個點st,入度比出度
小奇數,乙個出度比入度小奇數的點ed,則加無向邊(st,ed), 轉為混合圖尤拉迴路問題
另外,一般關於尤拉路的題,邊數都比較少,如果要求字典序最小,則可以直接存邊,排序後,每次dfs,先走小的,這樣記錄結束順序,倒敘輸出,就是字典序最小的。因為倒敘輸出,先遍歷到的點會先輸出。
混合圖尤拉迴路 相關題目:入就是變出),就能保證出 = 入。如果每個點都是出 = 入,那麼很明顯,該圖就存在尤拉迴路。
現在的問題就變成了:我該改變哪些邊,可以讓每個點出 =
入?構造網路流模型。首先,有向邊是不能改變方向的,要之無用,刪。一開始不是把無向邊定向了嗎?定的是什麼向,就把網路構建成什麼樣,邊長容量上限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(int u)
} }
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
尤拉迴路,尤拉路
參考以上 判斷尤拉路,尤拉迴路 注意圖聯通,可以dfs 或者並查集 一 無向圖 尤拉迴路 每個頂點度數都是偶數 尤拉路 所有點度數為偶數,或者只有2 個點度數為奇數 二 有向圖 非混合 尤拉迴路 每個頂點入度等於出度 尤拉路 每個頂點入度等於出度 或者只有1 個點入度比出度小 1,從這點出發,只有 ...
尤拉路 尤拉迴路
1 尤拉路 在乙個連通圖中存在一條路,經過途中所有邊一次且僅一次,這條路叫做尤拉路。2 尤拉迴路 在乙個連通圖中存在一條路,經過途中所有邊一次且僅一次,出發點亦是終點,這樣的路是尤拉迴路。1 無向圖有一條尤拉路 圖是連通的,且全部的結點的度是偶數 就是尤拉迴路的情況 或只有兩個結點的度是奇數。2 無...
尤拉路和尤拉迴路
尤拉環 圖中經過每條邊一次且僅一次的環 尤拉路徑 圖中經過每條邊一次且僅一次的路徑 尤拉圖 有至少乙個尤拉環的圖 半尤拉圖 沒有尤拉環,但有至少一條尤拉路徑的圖。無向圖 乙個無向圖是尤拉圖當且僅當該圖是連通的 注意,不考慮圖中度為0的點,因為它們的存在對於圖中是否存在尤拉環 尤拉路徑沒有影響 且所有...