尤拉道路和尤拉迴路

2021-08-13 15:43:53 字數 4478 閱讀 8892

尤拉通路: 通過圖中每條邊且只通過一次,並且經過每一頂點的通路

尤拉迴路: 通過圖中每條邊且只通過一次,並且經過每一頂點的迴路

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

無向圖設g是連通無向圖,則稱經過g的每條邊一次並且僅一次的路徑為尤拉通路;

如果尤拉通路是迴路(起點和終點是同乙個頂點),則稱此迴路是尤拉迴路

具有尤拉迴路的無向圖g成為尤拉圖

有向圖(1)設d是有向圖,d的基圖連通,則稱經過d的每條邊一次並且僅有一次的有向路徑為 有向尤拉通路

(2)如果有向尤拉通路是有向迴路,則稱此有向迴路為  有向尤拉迴路

(3)具有有向尤拉迴路的圖d稱為有向尤拉圖定理

無向圖g存在尤拉通路的充要條件是:g為連通圖,並且g僅有兩個奇度結點(度數為奇數的頂點)或者無奇度結點。 推論

(1) 當g是僅有兩個奇度結點的連通圖時,g的尤拉通路必以此兩個結點為端點;

(2)當g是無奇度結點的連通圖時,g必有尤拉迴路

(3)g為尤拉圖(存在尤拉迴路)的充分必要條件是  g為無奇度結點的連通圖

(有向圖) 定理

有向圖d存在尤拉通路的充要條件是:d為有向圖,d的基圖連通,並且所有頂點的出度與入度相等;或者  除兩個頂點外,其餘頂點的出度與入度都相等,而這兩個頂點中乙個頂點的出度與入度之差為1,另乙個頂點的出度與入度之差為-1. 推論

(1)當d除出、入度之差為1,-1的兩個頂點之外,其餘頂點的出度與入度相等時,d的有向尤拉通路必以出、入度之差為1的頂點作為始點,以出、入度之差為-1的頂點作為終點。

(2)當d的所有頂點的出、入度都相等時,d中存在有向尤拉迴路。

(3)有向圖d為有向尤拉圖的充要條件是  d的基圖為連通圖,並且所有頂點的出、入度都相等。

尤拉迴路的求解

兩種方法:(1)dfs搜尋  (fleury)佛羅萊演算法

(1)dfs搜尋 思想求解尤拉迴路的思路為:利用尤拉定理判斷出乙個圖存在尤拉通路或尤拉迴路後,選擇乙個正確的起始頂點,用dfs演算法遍歷所有的邊(每條邊只遍歷一次),遇到走不通就回退。在搜尋前進方向上將遍歷過的邊按順序記錄下來。這組邊的排列就組成了一條尤拉通路或迴路。

(2) (fleury)佛羅萊演算法

設g為乙個無向尤拉圖,求g中一條尤拉迴路的演算法如下:

(1) 任取g中一頂點v0,令p0=v0;

(2)假設沿pi=v0e1v1e2v2......eivi走到頂點vi,按下面方法從e(g)-中選ei+1。

ei+1與vi相關聯

除非無別的邊可供選擇,否則ei+1不應該是gi=g-中的橋。

(3)當(2)不能再進行時演算法停止。

可以證明的是,當演算法停止時,所得到的簡單迴路pm=v0e1v1e2v2......emvm,(vm=v0)為g中一條尤拉迴路。

備註知識:

設無向圖g(v,e)為連通圖,若邊集e1屬於e,在圖g中刪除e1中所有的邊後得到的子圖是不連通的,而刪除了e1的任一真子集後得到的子圖是連通圖,則稱e1是g的乙個割邊集。若一條邊構成乙個割邊集,則稱該邊為割邊,或橋 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

//尤拉路徑的輸出(此圖為無向圖)

#include

usingnamespacestd;

#define m 200

structstack

s;//頂點的棧結構

intedge[m][m];//鄰接矩陣

intn;//頂點個數

voiddfs(intx)//這裡的深度優先跟標準版有所區別,即不需要回溯

}

}

voidfleury(intx)//對頭節點使用fleury演算法 查詢尤拉路徑

}

if(!flag)

else

}

cout<}

intmain()

num=0;

start=0;//如果存在奇度頂點,則從奇度頂點出發,否則從頂點0出發

for(inti=0;i

}

if(num==0||num==2) fleury(start);

elsecout<<"no euler path"<return0;

}

練習:單詞(

具體大意:

輸入n(n<=100000)個單詞,是否可以把所有這些單詞排成乙個序列,使得每個單詞的第乙個字母和上乙個單詞的最後乙個字母相同(例如 acm、malfon、mouse)。每個單詞最多包含1000個小寫字母,輸入中可以有重複單詞。

分析:把字母看做節點,單詞看成有向邊,則問題有解,當且僅當圖中有尤拉路徑。前面講過,有向圖存在尤拉道路的條件有兩個:底圖(忽略邊方向後得到的無向圖)連通,且度數滿足上面討論過的條件。判斷連通的方法有兩種,一是之前介紹過的dfs,二是並查集,可以按照自己喜好選用。

尤拉道路和尤拉迴路

尤拉道路 能否從無向圖中的乙個節點出發走出一條道路,每條邊恰好經過一次 尤拉迴路 在尤拉道路的基礎上要回到原點 不難發現在尤拉道路中,除了起點和終點外,其他點的進出次數應該相等 換句話說除了起點和終點外,其他點的度數應該是偶數 則如果乙個圖是聯通的,且最多只有兩個奇點,則一定存在尤拉道路 如果奇點不...

尤拉道路與尤拉迴路

尤拉道路與尤拉迴路 尤拉道路 通過圖g中每條邊一次且僅一次的道路稱作該圖的尤拉道路。尤拉迴路 通過圖g中每條邊一次且僅一次的迴路稱作該圖的尤拉迴路。尤拉圖 存在尤拉迴路的圖稱為尤拉圖。尤拉在1736年給出了尤拉道路 迴路存在的必要條件,在1873年希爾霍爾策首次給出了刻畫尤拉圖的充要條件。定理 a ...

尤拉路和尤拉迴路

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