有向圖歐拉回路條數-BEST定理

教學香腸系列……

給定一張所有點入度=出度的有向圖,求歐拉回路條數。
n500

爲了避免出現重複,對於這個無向圖,我們先確定一條1 號節點出發的起始邊。

找一個以1 號點爲根的內向樹(即每個點有唯一的一條路徑到達1 號點),對於一個點的所有不在樹上、非起始邊的出邊,指定一個順序。

容易證明,這樣做的一個方案唯一對應一條歐拉回路。

證明:
=>:構造法,從1號節點出發,先走起始邊,每到一個點,優先走非樹邊,再走樹邊。對於非樹邊,按照指定的順序走,即,如果第一條邊沒走過,走第一條,否則走第二條,…,若所有非樹邊都走過,則走樹邊。由於所有點入度=出度,所以不會有無邊可走的情況,直到回到1 號節點且無邊可走爲止。
顯然每條邊至多走一次,如何證明每條邊至少走了一次?
性質1:如果一個點有未走過的出邊,則這個點出發的樹邊一定未走過,因爲樹邊是最後走的
性質2:如果一個節點出發的樹邊未走過,則它父親節點出發的樹邊一定也未走過,因爲每個節點入度=出度
然後就好辦了,反證法,假設存在一條邊沒走過,那麼這條邊的樹邊一定也沒走過,進而這條邊父親的樹邊也沒走過……以此類推,1 號節點有至少一條入邊沒有走過,那麼由於入度=出度,1 號節點也有至少一條出邊未走過,這與終止條件矛盾,證畢。

<=:反向就很簡單了,對於歐拉回路我們從1 號節點出發先走起始邊,然後對於每個點的所有出邊,最後一條是樹邊,其餘按照遍歷順序確定順序即可得到一個上述方案。(1 號節點不選樹邊,起始邊確定,將其餘出邊確定順序就行了)
只需證明我們選定的這些樹邊不會成環即可。
由於1 號節點不選擇樹邊,因此環上一定不存在1 號節點。
假如這些邊存在環,那麼從環上一個點出發,最後一次離開這個點走的是樹邊,那麼沿着樹邊走下去,最後仍然會回到這個點,而這個點的最後一條出邊已走過,因此歐拉回路終止於此節點。而此節點不是1 號節點,矛盾。

這樣我們就將有向圖歐拉回路一一對應了上述方案,那麼方案數是多少?

對於每個生成的內向樹,1 號節點起始邊固定,其餘邊指定順序,方案數爲(d11)! ;其餘節點有一條樹邊,其餘邊指定順序,方案數爲(di1)! ,總方案數爲i=1n(di1)! 。這裏di 表示點i 的出度。

那麼以1 爲根的內向樹有多少個呢?矩陣樹定理,O(n3) 求出。

最終答案爲T1(G)i=1n(di1)!
其中T1(G)= (出度矩陣-鄰接矩陣)$去掉第一行第一列後行列式的值。

順帶一提,由於有向圖的歐拉路徑條數恆定不隨根節點改變而改變,所以T1(G) 還可以換成T2(G),T3(G),... 。這樣我們就證明了對於歐拉圖來說,T1(G)=T2(G)=...=Tn(G) 。我還沒想好怎麼用其他方法證明這個結論……

代碼自然是沒有的啦。。你可曾見過老年選手打代碼?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章