1. 程式人生 > >歐拉回路、混合圖的歐拉回路

歐拉回路、混合圖的歐拉回路

歐拉回路

從一個點開始把圖中的邊恰好經過一次,再回到出發點,這樣的路徑就是歐拉回路。

在這裡插入圖片描述

如圖就是一個歐拉回路

歐拉回路判定

不過怎麼樣的圖中才存在歐拉回路呢?

歐拉回路分有向圖和無向圖兩種:

  1. 有向圖: 圖中所有點的入度等於出度
  2. 無向圖: 圖中所有點的度數都為偶數

這還是很好理解的,不過你可能要問,怎麼知道一個混合圖中有沒有歐拉回路呢?

混合圖的歐拉回路

過程:

  1. 先將無向邊隨意定向
  2. 判斷每個點的入度和出度是不是同奇偶,不同則無解
  3. 用一個超級原點向出度小於入度的點連一條容量為 2{|入度-出度| \over 2} 的邊 用一個超級匯點向出度大於入度的點連一條容量為
    2{|入度-出度| \over 2}
    的邊
  4. 將原圖無向邊的另一個方向邊連到圖中,容量為 1
  5. 跑最大流,判斷與 S 相連的邊是否滿流,滿流則有解

PS:其實也十分好理解,其實就是將原來無向邊的方向進行調整,使得每個點的入度等於出度。每個點需要調整 2{|入度-出度| \over 2} 次,所以邊的容量為 2{|入度-出度| \over 2}。 當我們流過一條邊的時候,兩條邊容量各減一,就相當於把邊調整的過程。