在做一些圖類時經常要用到尤拉路,比如近期的單詞連線和塗彩棒等,下面整理了一點:
尤拉通路: 通過圖中每條邊且只通過一次,並且經過每一頂點的通路。
尤拉迴路: 通過圖中每條邊且只通過一次,並且經過每一頂點的迴路。
無向圖是否具有尤拉通路或迴路的判定:
尤拉通路:圖連通;圖中只有0個或2個度為奇數的節點
尤拉迴路:圖連通;圖中所有節點度均為偶數
有向圖是否具有尤拉通路或迴路的判定:
尤拉通路:圖連通;除2個端點外其餘節點入度=出度;1個端點入度比出度大1;乙個端點入度比出度小1 或 所有節點入度等於出度
尤拉迴路:圖連通;所有節點入度等於出度
混合圖尤拉迴路:
原來混合圖尤拉迴路用的是網路流。
把該圖的無向邊隨便定向,計算每個點的入度和出度。如果有某個點出入度之差為奇數,那麼肯定不存在尤拉迴路。因為尤拉迴路要求每點入度
=出度,也就是總度數為偶數,存在奇數度點必不能有尤拉迴路。
好了,現在每個點入度和出度之差均為偶數。那麼將這個偶數除以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連線的點,自然早在開始就已經滿足入
=出了。那麼在網路流過程中,這些點屬於「中間點」。我們知道中間點流量不允許有累積的,這樣,進去多少就出來多少,反向之後,自然仍保持平衡。
所以,就這樣,混合圖尤拉迴路問題解決了。
尤拉迴路 尤拉通路判斷
尤拉迴路 圖g,若存在一條路,經過g中每條邊有且僅有一次,稱這條路為尤拉路,如果存在一條迴路經過g每條邊有且僅有一次,稱這條迴路為尤拉迴路。具有尤拉迴路的圖成為尤拉圖。判斷尤拉通路是否存在的方法 有向圖 圖連通,有乙個頂點出度大入度1,有乙個頂點入度大出度1,其餘都是出度 入度。無向圖 圖連通,只有...
尤拉迴路 尤拉通路問題總結
經過圖中所有邊恰好一次,並回到原點的路徑。無向圖 g 存在尤拉迴路的充要條件是 g 中無奇數度數的節點。有向圖 g 存在尤拉迴路的充要條件是 g 聯通且對於所有點 p in g 有其入度等於其出度。時間複雜度 o n 先指定乙個點作為起始點 s 進行 dfs 邊走邊刪邊。並壓入棧中 如果走到乙個點了...
尤拉迴路 通路
如果圖g中所有邊一次僅且一次行遍所有頂點的通路稱作尤拉通路。如果圖g中所有邊一次僅且一次行遍所有頂點的迴路稱作尤拉迴路。簡而言之就是一筆畫的遊戲。前提,圖聯通。有向圖 有乙個頂點出度大入度1,有乙個頂點入度大出度1,其餘都是出度 入度。無向圖 只有兩個頂點是奇數度,其餘都是偶數度的。有向圖 所有的頂...