HDU 1878 尤拉迴路

2022-07-30 18:45:12 字數 1267 閱讀 5155

尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?

input

測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數n ( 1 < n < 1000 )和邊數m;隨後的m行對應m條邊,每行給出一對正整數,分別是該條邊直接連通的兩個節點的編號(節點從1到n編號)。當n為0時輸入結 

束。output

每個測試用例的輸出佔一行,若尤拉迴路存在則輸出1,否則輸出0。 

sample input

3 3

1 21 3

2 33 2

1 22 3

0

sample output

1

0

解題思路:

本題有多組測試資料,每組給出頂點數n與邊數m,之後m行給出每條邊的資訊,想要求出尤拉迴路是否存在,學過離散數學的同志應該明白,只要無向連通圖中每個點的度都為偶數,該圖一定存在尤拉迴路。

那麼問題就轉化為了判斷該圖是否連通與判斷所有頂點的度是否都為偶數。

判斷是否連通可以使用並查集判斷所有頂點是否都再乙個集合中,頂點的度用乙個陣列來記錄,由於是無向圖所以再輸入時頂點每出現一次該頂點的度便加一。

ac**

1 #include 2

using

namespace

std;

3const

int maxn = 1010;4

intf[maxn];

5int

node[maxn];

6int getfather(int x) //

並查集找爹函式713

intmain()

14//

初始化所有頂點的父親為自己,即所有頂點不連通

22 memset(node, 0, sizeof

(node));

23//

初始化所有點度為0

24for(int i = 0; i < m; i++)36}

37int fx = f[1

];

38bool flag = true;39

//判斷所有點是否再乙個集合中

40for(int i = 2; i <= n; i++)45}

46if(flag)53}

54if

(flag)

57 }else60}

61return0;

62 }

HDU1878 尤拉迴路

problem description 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?input 測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數n 1 n 1000 和邊數m 隨後的m行對應m條邊,每行給出...

HDU 1878 尤拉迴路

演算法思想 判斷乙個圖中是否存在尤拉迴路 每條邊恰好只走一次,並能回到出發點的路徑 在以下三種情況中有三種不同的演算法 一 無向圖 每個頂點的度數都是偶數,則存在尤拉迴路。二 有向圖 所有邊都是單向的 每個節頂點的入度都等於出度,則存在尤拉迴路。以上兩種情況都很好理解。其原理就是每個頂點都要能進去多...

HDU 1878 尤拉迴路

題意 尤拉迴路的判斷條件,一 無向圖 每個頂點的度數都是偶數,則存在尤拉迴路。二 有向圖 所有邊都是單向的 每個節頂點的入度都等於出度,則存在尤拉迴路。以上兩種情況都很好理解。其原理就是每個頂點都要能進去多少次就能出來多少次。三 混合圖 有的邊是單向的,有的邊是無向的。常被用於比喻城市裡的交通網路,...