尤拉路 尤拉迴路 概念及其練習

2022-01-31 18:39:21 字數 3310 閱讀 9740

尤拉路:

如果給定無孤立結點圖g,若存在一條路,經過圖中每邊一次且僅一次,這條路稱為尤拉路;

如果給定無孤立結點圖g,若存在一條迴路,經過圖中每邊一次且僅一次,那麼該迴路稱為尤拉迴路。

存在尤拉迴路的圖,稱為尤拉圖。

一、 對於無向圖g,具有一條尤拉路,當且僅當g是連通的,且有零個或兩個奇數度結點。

且有零個奇數度結點,存在尤拉迴路;有兩個奇數度結點,存在尤拉路。

判斷無向圖g是否連通,可以從任意結點出發,進行深度優先遍歷,如果可以遍歷到所有點,也可以用並查集,判斷根節點的個數,

說明,圖g連通,否則,圖g不連通。

二 、對於有向圖g,具有一條單向尤拉路,當且僅當g是連通的,且每個結點入度等於出度,或者,

除兩個結點外,每個結點的入度等於出度,而這兩個結點滿足,乙個結點的入度比出度大1,

另乙個結點的入度比出度小1。

判斷有向圖g是否連通,可以某一結點出發,進行深度優先遍歷,如果存在一點作為初始結點

可以遍歷到所有點,說明,圖g連通,否則,圖g不連通。ps:

判斷尤拉路,尤拉迴路:

注意圖聯通,可以dfs或者並查集

一.無向圖

尤拉迴路:每個頂點度數都是偶數

尤拉路:所有點度數為偶數,或者只有2個點度數為奇數

二.有向圖(非混合)

尤拉迴路:每個頂點入度等於出度

尤拉路:每個頂點入度等於出度;

或者只有1個點入度比出度小1, 從這點出發,只有1個點出度比入度小1,從這個點結束,其他點入度等於出度

三.混合圖(有的邊單向,有的邊不確定方向)

尤拉迴路:

判斷乙個圖中是否存在尤拉迴路(每條邊恰好只走一次,並能回到出發點的路徑),在以下三種情況中有三種不同的演算法:

一、無向圖

每個頂點的度數都是偶數,則存在尤拉迴路。

二、有向圖(所有邊都是單向的)

每個節頂點的入度都等於出度,則存在尤拉迴路。

尤拉路:

首先判斷底圖是否聯通;

然後,給不定向邊 隨便給定方向,考慮每個點的出度和入度:

1)如果入度和出度之差 都是偶數,說明如果存在尤拉路,則一定是尤拉迴路,解法同上;

2)如果可以找到乙個且僅乙個點st,入度比出度

小奇數,乙個出度比入度小奇數的點ed,則加無向邊(st,ed), 轉為混合圖尤拉迴路問題

另外,一般關於尤拉路的題,邊數都比較少,如果要求字典序最小,則可以直接存邊,排序後,每次dfs,先走小的,這樣記錄結束順序,倒敘輸出,就是字典序最小的。因為倒敘輸出,先遍歷到的點會先輸出。

混合圖尤拉迴路  相關題目:入就是變出),就能保證出 = 入。如果每個點都是出 = 入,那麼很明顯,該圖就存在尤拉迴路。

現在的問題就變成了:我該改變哪些邊,可以讓每個點出 =

入?構造網路流模型。首先,有向邊是不能改變方向的,要之無用,刪。一開始不是把無向邊定向了嗎?定的是什麼向,就把網路構建成什麼樣,邊長容量上限1。

另新建s和t。對於入 > 出的點u,連線邊(u, t)、容量為x,對於出 > 入的點v,連線邊(s,

v),容量為x(注意對不同的點x不同)。之後,察看是否有滿流的分配。有就是能有尤拉迴路,沒有就是沒有。尤拉迴路是哪個?檢視流值分配,將所有流量非

0(上限是1,流值不是0就是1)的邊反向,就能得到每點入度 = 出度的尤拉圖。

由於是滿流,所以每個入 >

出的點,都有x條邊進來,將這些進來的邊反向,ok,入 = 出了。對於出 > 入的點亦然。那麼,沒和s、t連線的點怎麼辦?和s連線的條件是出

> 入,和t連線的條件是入 > 出,那麼這個既沒和s也沒和t連線的點,自然早在開始就已經滿足入 =

出了。那麼在網路流過程中,這些點屬於「中間點」。我們知道中間點流量不允許有累積的,這樣,進去多少就出來多少,反向之後,自然仍保持平衡。

所以,就這樣,混合圖尤拉迴路問題,解了。

1 hdu 3018 ant trip

一筆畫問題,無向圖尤拉路或者尤拉迴路,注意題目說了,如果是孤立點,則不用考慮。

對於每個連通塊,如果全都是偶數度,則需要1筆;如果不是,則需要奇數度頂點個數的1/2筆。  

我用並查集寫的。

2 poj 1041 john's trip

題目給了乙個圖,街道編號1..n(n<1995), 點編號1..m(m<44),求尤拉迴路

且字典序最小

關於字典序最小,每次dfs,先走最小的,這樣倒敘輸出時 先dfs到的先輸出

比較好的是實現是 直接按編號存邊,dfs 記錄結束序,倒敘輸出

fill() [1,m] 忘加1了,wa了幾次

3 poj 1386 play on words

貌似很經典的模型了,應該叫 單詞接龍吧。

本題要求判斷是否有 有向圖尤拉路

4 poj 2230 watch cow

題目描述每條路必須走兩次,且方向不同,其實一樣了,有向圖的尤拉迴路

不過需要輸出的是路徑中的節點。

[cpp]view plain

copy

void dfs(int u)   

}  }  

5 poj 2513 colored sticks

比較簡單,判定是否存在 無向圖尤拉路

6 poj 2337 catenyms

還是單詞 首尾相連,要求判斷,然後輸出字典序最小的

有向圖尤拉路,字典序最小,把單詞按照字典序排序,優先dfs小的,記錄結束序,倒敘輸出即可。

沒寫break,查了好久

7 poj 1392 ouroboros snake

這裡涉及到debruijin圖,即當k=3 時,我們構造乙個0,1構成的環,長度為 2^k,其中,任意的連續的長度為k個的,會組成0,2^k-1的所有的數字剛好一次,而且要求換的字典序最小。  

這裡關鍵就是建圖了,取k-1長度的串,一共有2^(k-1)個作為點,如果我們把這個串左移,末尾加1或0,可以得到新的節點,則連有向邊,共有2^k條邊,求尤拉迴路,字典序最小即可。

本題要求 按順序輸出 組成的數字。

8 hdu 2894 debruijin

同上,這次要輸出串

郵遞員問題   poj2040 poj2404

哈密頓迴路   poj2439 poj2288 poj1392 hdu2894

hdu3018

1116

2894

1956

3472

尤拉迴路,尤拉路

參考以上 判斷尤拉路,尤拉迴路 注意圖聯通,可以dfs 或者並查集 一 無向圖 尤拉迴路 每個頂點度數都是偶數 尤拉路 所有點度數為偶數,或者只有2 個點度數為奇數 二 有向圖 非混合 尤拉迴路 每個頂點入度等於出度 尤拉路 每個頂點入度等於出度 或者只有1 個點入度比出度小 1,從這點出發,只有 ...

尤拉路 尤拉迴路

1 尤拉路 在乙個連通圖中存在一條路,經過途中所有邊一次且僅一次,這條路叫做尤拉路。2 尤拉迴路 在乙個連通圖中存在一條路,經過途中所有邊一次且僅一次,出發點亦是終點,這樣的路是尤拉迴路。1 無向圖有一條尤拉路 圖是連通的,且全部的結點的度是偶數 就是尤拉迴路的情況 或只有兩個結點的度是奇數。2 無...

尤拉路和尤拉迴路

尤拉環 圖中經過每條邊一次且僅一次的環 尤拉路徑 圖中經過每條邊一次且僅一次的路徑 尤拉圖 有至少乙個尤拉環的圖 半尤拉圖 沒有尤拉環,但有至少一條尤拉路徑的圖。無向圖 乙個無向圖是尤拉圖當且僅當該圖是連通的 注意,不考慮圖中度為0的點,因為它們的存在對於圖中是否存在尤拉環 尤拉路徑沒有影響 且所有...