歐拉圖的判定:都會。
求任意一條歐拉回路:都會。
求字典序最小的歐拉回路/路徑
考慮從一個點開始任意走,爲什麼走不出一條歐拉回路/路徑。這是因爲走了若干步之後圖會被分成若干個邊雙,這些邊雙形成了一條鏈的結構,當前點和終點在鏈的兩頭。此時如果走了橋邊,那麼同一個邊雙的其他邊就走不到了。
但是補救的方法也是有的,可以走完之後再回過頭來把這個邊雙組成的環塞回去。
所以就可以這麼做:每次選擇出邊中編號最小的走過去,最後一定可以走出一條路徑/迴路,然後再倒着往回看,見到一個點還有未遍歷的出邊時就說明這一步走了不合法的橋邊,所以再把這個點雙塞回去即可。容易證明這樣的字典序一定是最小的。
De Bruijn序列
如果把每一個長度爲 \(n\) 的 01 串看做點,那麼就轉化爲求一條哈密頓迴路,這顯然不太能做。
所以把它看做邊,把長度爲 \(n-1\) 的串看做點,就轉化爲求歐拉回路了。
混合圖歐拉回路
先把無向邊任意定向,然後反轉就可以使得兩個點的 \(in-out\) 分別加減 2 。
這顯然可以網絡流求解。
中國郵遞員問題
這顯然可以轉成費用流求解。
歐拉回路計數
給一個有向半歐拉圖,求以 1 爲終點的歐拉路徑個數。
整一個神奇的映射:任意找一棵以 1 爲根的內向樹,再把每個點其他的出邊任意排序,那麼這樣的方案與歐拉路徑一一對應。
方案轉歐拉路徑:走到每一個點的時候,如果還有非樹邊沒有走那就按照定的順序走,否則走樹邊。只需要證明這樣走在任意時刻都只有一個弱連通分量和一堆孤立點即可。考慮第一次走樹邊的時候,這個點的出度恰好比入度大 1 ,所以它已經沒有入度了,所以走了樹邊之後就變成孤立點,沒有問題。
歐拉路徑轉方案:把走出每個點的最後一條邊作爲樹邊即可。如果有環那麼就沒辦法從環裏出來了。
得到式子 \(T_{1} d_{1} ! \prod_{i=2}^{n}\left(d_{i}-1\right) !\) 。
有向歐拉圖求任意一個歐拉回路也和這個類似,但是要欽定走的第一條邊是從 1 出發的編號最小的邊,所以方案數是 \(T_{1} \prod_{i=1}^{n}\left(d_{i}-1\right) !\) 。由此也證明了 \(T_1=T_2=\cdots=T_n\) 。