時間限制:3000 ms | 記憶體限制:65535 kb
難度:4
描述zyc從小就比較喜歡玩一些小遊戲,其中就包括畫一筆畫,他想請你幫他寫乙個程式,判斷乙個圖是否能夠用一筆畫下來。
規定,所有的邊都只能畫一次,不能重複畫。
輸入第一行只有乙個正整數n(n<=10)表示測試資料的組數。
每組測試資料的第一行有兩個正整數p,q(p<=1000,q<=2000),分別表示這個畫中有多少個頂點和多少條連線。(點的編號從1到p)
隨後的q行,每行有兩個正整數a,b(0輸出
如果存在符合條件的連線,則輸出"yes",
如果不存在符合條件的連線,輸出"no"。
樣例輸入
2樣例輸出4 31 2
1 31 4
4 51 2
2 31 3
1 43 4
no**yes
[張云聰]原創
做這道題之前,我們先引入乙個列題........
在18世紀的哥尼斯堡城裡有七座橋。當時 有很多人想要一次走遍七座橋,並且每座橋只能經過一次。這就是世界上很有名的哥尼斯堡七橋問題。你能一次走遍這七座橋,而又不重複嗎?(自己動手畫畫吧)
答案16.一筆畫問題
這個問題,實際上是一筆畫問題。
一筆畫就是一筆可以畫成乙個圖。
判斷一筆畫的方法:
①是連通的。乙個圖,如果圖上任意二點總有線段連線著,就稱為連通的。不是連通的就不能一筆畫出。
②奇點個數是0或者是2。圖上線段的端點可以分成二類,奇點和偶數。乙個點,以它為端點的線段數是奇數就稱為奇點,線段數是偶數就稱為偶點。
乙個圖是否是一筆畫就看奇點的個數,奇點個數是 0 或者 2,就是一筆畫,否則就不是一筆畫。
哥尼斯橋問題,就是一筆畫問題。但因a、b、c、d四個點都是奇點即奇點的個數是4,而不是0或2,所以不是一筆畫,也就不能一次走遍,而又不重複。
針對這麼個情況,所謂的連通圖:
若無向圖g是平凡圖或者g中任意兩點都是連通的,則稱g是連通圖,否則稱g是非連通圖。
關於弱連通圖和強連通圖:
弱連通圖的概念是:如果略去d中各有向邊的方向後所得無向圖是連通圖,則稱d是弱連通圖。
反之 若d中任何一對頂點都是互相可達的,則稱d是強連通圖。
所以這個問題完全可以轉化策略為:
第一步: 首先我們不管它三七二十幾,先進行連通性的判斷。
第二步:
(1)如果是連通的,我們來判斷此圖的度的奇點的個數是0或者是2 ,如果是,則說明這個是尤拉圖,即可以一筆畫出,反之則不能一筆畫出
(2)如果是非連通的,這說明這個圖很定不能一筆畫出。
**為:
採用dfs演算法求解:
1view code/*nyoj 42 coder gxjun*/2
/*一筆畫問題
*/3 #include4 #include
5 #include6
#define maxn 1005
7int edge[maxn]; //度8
bool
vis[maxn],map[maxn][maxn];
9int
pp , qq ;
10void dfs( int
pos )
1117
18int
main()
1936 dfs(1
);37 flag=true;38
for(i=1;i<=pp ;i++)43}
44if
(flag)
4554
else
55 puts("no"
);56}57
return0;
58 }
採用並查集求解
**:
1view code/*並查集 @coder gxjun*/2
/*一筆畫問題
*/3 #include4 #include
5 #include6
#define maxn 1001
7int
rank[maxn],father[maxn];
8int
edge[maxn];
9int
pp,qq;
10void
init()15}
16int set_find(int
a)22
//帶狀態壓縮的並查集
23void set_union(int x,int
y)31
else35}
36}3738
intmain()
3953
for(i=1;i<=pp;i++)
54if(rank[i]==pp) break;55
if(i<=pp)
5663
else puts("no"
);64}65
return0;
66 }
NYOJ 42 一筆畫問題
快有乙個禮拜沒寫過部落格了,資料結構裡面的演算法太多,經典題目就那麼點,做一道少一道,因為自己學,所以花了很多時間來理解。不扯了。思路 簡單的尤拉迴路,判斷是否能夠一筆畫就在於各個點是否連通,判斷是否連通可以用並查集來做。而且節點為奇點個數為0或者為2才能一筆畫。include includeint...
NYOJ 42 一筆畫問題
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 zyc從小就比較喜歡玩一些小遊戲,其中就包括畫一筆畫,他想請你幫他寫乙個程式,判斷乙個圖是否能夠用一筆畫下來。規定,所有的邊都只能畫一次,不能重複畫。輸入 第一行只有乙個正整數n n 10 表示測試資料的組數。每組測試資料的第一...
NYOJ 42 一筆畫問題
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 zyc從小就比較喜歡玩一些小遊戲,其中就包括畫一筆畫,他想請你幫他寫乙個程式,判斷乙個圖是否能夠用一筆畫下來。規定,所有的邊都只能畫一次,不能重複畫。輸入第一行只有乙個正整數n n 10 表示測試資料的組數。每組測試資料的第一行...