歐拉回路與歐拉路徑總結


  筆者在圖論掙扎了這么久,今天總算暫時到頭了,鑒於歐拉路徑和歐拉回路的精妙(e xin)程度,在這里做一個小小的總結。

 

  首先歐拉絕對是個偉(huai)人,創造了不少東西,其中就包括歐拉路徑和歐拉回路這種隨便虐死蒟蒻萌新的***

定義

  歐拉回路:從圖上一個點u出發不重復地經過每一條邊后,再次回到點u的一條路徑。

  歐拉路徑:從圖上一個點u出發不重復地經過每一條邊的一條路徑(不必回到點u)。

  歐拉圖即存在歐拉回路的圖,半歐拉圖即存在歐拉路徑的圖。

  (就像是一筆畫,要求每條邊只走一次,但每個點可以多次經過,而要求每個點只走一次的模型是哈密頓環。注意歐拉回路必須回到起點,歐拉路徑則不必,可以說歐拉回路一定是歐拉路徑,反之不成立。)

 

定理

  (1)無向圖歐拉回路的判定:圖G為連通圖,所有頂點的度為偶數。

  (2)無向圖歐拉路徑的判定:圖G為連通圖,除有2個頂點度為奇數外,其他頂點度都為偶數。

  (3)有向圖歐拉回路的判定:圖G的①基圖聯通,所有頂點的入度等於出度。

  (4)有向圖歐拉路徑的判定:圖G的基圖聯通,存在頂點u的入度比出度小1,v入度比出度大一,其余所有頂點的入度等於出度。(此時u即路徑的起點,v即終點)

    ① 忽略有向圖所有邊的方向,得到的無向圖稱為該有向圖的基圖

   “聯通”標了紅字,當然很重要!有時(實際上是很多時候)給出的原圖並不是一個連通圖,需小心處理,后面注意事項會提。

 

其他定理(非正式定理,但做題時很有用)

  (5)無向圖為(半)歐拉圖時,只需用1筆畫成;無向圖為非(半)歐拉圖時,即奇點(度為奇數的點)數k>2,需用k/2筆畫成。

  (6)可以用加邊的方式把一個非歐拉圖變成歐拉圖。對於無向圖來說,每個奇點都需加一個度,加的邊為 奇點數/2 ;對於有向圖來說,每個點都需加上入度與出度之差,加的邊數為每個點入度與出度之差的絕對值之和再除以2。

  筆者在學習(5)(6)定理的時候,曾有過一個疑問:如果要除以2的數是個奇數該怎么辦,該向上還是向下取整呢?我承認這是個智障的問題。首先介紹一個定理:一個圖的奇點數一定是偶數。證明很簡單,可以看看這里:(https://blog.csdn.net/c_lyr/article/details/53082753

  那么對於(5),和(6)的前半條,肯定不會出現奇數除以2;對於(6)的后半條,我們考慮當入度與出度之差是偶數時,不用擔心,而當入度與出度之差是奇數時,則入度與出度之和一定是奇數,即這個點是一個奇點,而奇點有偶數個,偶數個奇數相加,結果也是偶數,因此絕不會出現和是奇數的情況。

 

求歐拉回路歐拉路徑

  用DFS遍歷整張圖,走過的邊標記(如果是無向圖,注意同時標記相反方向的邊),在DFS返回后把點(也可以是邊,看題目要求怎樣輸出)入棧,最后依次出棧即為路徑序列。代碼很簡單,去網上搜吧,就不貼了(筆者懶)。。。

 

注意事項

  求歐拉回路與歐拉路徑其實並不是很難的,套模板就行了。難的是那種給一張圖統計操作數的題,根據筆者的經驗,這種題多半是跟點的入度和出度有關的。當你一臉懵逼不知所措時,不妨從入度和出度入手,靈活運用各種定理分類討論,往往能找到問題的突破口。還有就是前面提到的,當原圖有多個連通塊時,需先辨認出每個連通塊(並查集或DFS,個人比較喜歡並查集),再分別處理。對於只有一個而沒有邊的塊,一般不用考慮,跳過就行了。

 附上一道還不錯的題 https://loj.ac/problem/10111

 

 至此,我已經介紹了關於歐拉回路和歐拉路徑的不少知識(坑點),更多的經驗還需在刷題中獲得,祝大家AC愉快。

 

2018-08-22


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM