參考以上:
判斷尤拉路,尤拉迴路:
注意圖聯通,可以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 plaincopy
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.有向連通圖存在尤拉路的條件 滿...