點選開啟鏈結
k - 尤拉迴路
尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?
input
測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數n ( 1 < n < 1000 )和邊數m;隨後的m行對應m條邊,每行給出一對正整數,分別是該條邊直接連通的兩個節點的編號(節點從1到n編號)。當n為0時輸入結
束。output
每個測試用例的輸出佔一行,若尤拉迴路存在則輸出1,否則輸出0。
sample input
3 3sample output1 21 3
2 33 2
1 22 3
0
10
尤拉迴路及尤拉路徑定義:
若圖g中存在這樣一條路徑,使得它恰通過g中每條邊一次,則稱該路徑為
尤拉路徑
。若該路徑是乙個圈,則稱為
尤拉(euler)迴路
。判斷方法:
先用 dfs 或並查集判斷圖的連通性,再根據頂點度的性質判斷。
有向圖尤拉迴路
:所有頂點的入度和出度相等
無向圖尤拉迴路:所有頂點的度數為偶數
有向圖尤拉路徑:所有頂點的入度和出度相等或存在兩個頂點
a、b ,a 的入度比 b 的入度大 1,a 的出度比 b 小 1
無向圖尤拉路徑:所以頂點的度的和為偶數且至多有兩個頂點的度數為奇數
select code
還可以用dfs來做;#include
#include
#include
#include
using
namespace
std;
int count=0;
int par[10000];
int aa[1005];
void
init
(int a)
intfind
(int x)
void
join
(int x, int y)
}int
main
() int sum=0;
for(int i=0; iif(par[i]==i)
sum++;
if(aa[i]&1)//aa[i]%2
flag=
0;
}
if(sum!=1)
flag = 0;
printf("%d\n",flag);
} return
0;}
尤拉迴路 並查集
時間限制 1 sec 記憶體限制 32 mb 提交 6 解決 5 提交 狀態 討論版 尤拉迴路是指不令筆離開紙面,可畫過圖中每條邊僅一次,且可以回到起點的一條迴路。現給定乙個圖,問是否存在尤拉迴路?測試輸入包含若干測試用例。每個測試用例的第1行給出兩個正整數,分別是節點數n 1 n 1000 和邊數...
hdoj1878尤拉迴路(並查集 尤拉迴路)
description rpg girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,rabbit只願意和xhd或pqk做partne...
HDU 1878 尤拉迴路(並查集 尤拉迴路判定)
解題思路 尤拉迴路的定義 從圖中某一頂點出發,所有邊僅經過一次,最後回到該頂點。判斷尤拉迴路 前提 這個圖是連通的,也就是所有點都連在乙個圖上了 無向圖 頂點度數為偶數 有向圖 所有點入度 出度 判斷是否連通用並查集即可,另外就是度數的統計。對於並查集陌生可以參考 includeusing name...