hdu 1878 尤拉迴路

2022-08-03 14:09:14 字數 1723 閱讀 1558

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

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

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

3 31 2

1 32 3

3 21 2

2 3010

判斷一張圖是否存在尤拉迴路。。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

std::map;

9using

std::cin;

10using

std::cout;

11using

std::endl;

12using

std::find;

13using

std::sort;

14using

std::pair;

15using

std::vector;

16using

std::multimap;

17#define pb(e) push_back(e)

18#define sz(c) (int)(c).size()

19#define mp(a, b) make_pair(a, b)

20#define all(c) (c).begin(), (c).end()

21#define iter(c) decltype((c).begin())

22#define cls(arr,val) memset(arr,val,sizeof(arr))

23#define cpresent(c, e) (find(all(c), (e)) != (c).end())

24#define rep(i, n) for (int i = 0; i < (int)(n); i++)

25#define tr(c, i) for (iter(c) i = (c).begin(); i != (c).end(); ++i)

26const

int n = 1010

;27 typedef unsigned long

long

ull;

28struct node ;

29struct

euler

37 inline void add_edge(int u, int

v) 40 inline void dfs(int

u) 45

}46 inline void work(int n, int

m) 55

rep(i, n) 57}

58if (!f)

59 dfs(1

);60

rep(i, n) 62}

63 puts(f ? "

1" : "0"

);64}65

}go;

66int

main()

76return0;

77 }

view code

HDU1878 尤拉迴路

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

HDU 1878 尤拉迴路

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

HDU 1878 尤拉迴路

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