play on wordsuva - 10129
ordering is possible.
the door cannot be opened.
1 #include2 #include3 #include4const
int maxn=26;5
using
namespace
std;6/*
7尤拉迴路
8圖是否連通
9是否存在聯通塊1.並查集2.dfs
10判斷入度出度
11*/
12int
g[maxn][maxn],vis[maxn][maxn];
13int n,m,in[maxn],out
[maxn];
14bool dfs(int
u)1525}
26return
findd;27}
28bool
communication()
2938}39
return
true;40
}41bool
check()
4252
else
if(out[i]-1==in[i]&&outnode)
56else
57return
false;58
}59if(innode!=outnode)//
兩個點乙個存在乙個不存在,則不能構成尤拉迴路
60return
false;61
return
true;62
}63intmain()
6484
if(communication())
8589
else flag=false;90
if(flag)
91 printf("
ordering is possible.\n");
92else printf("
the door cannot be opened.\n");
93}94return0;
95 }
尤拉迴路:該迴路遍歷了乙個圖中所有的邊,並且每條邊只遍歷一次。(一筆畫)
尤拉路徑:從起點開始到終點,遍歷了圖中所有的邊,並且每條邊只遍歷一次。
度數:乙個點連線了幾條邊。
入度和出度分別指:進入該點的邊的數量,走出該點的邊的數量。
連通無向圖存在尤拉迴路的充要條件:所有點的度數都為偶數。
連通無向圖存在尤拉路徑的充要條件:僅存在兩個度數為奇數的點,其他點的度數都為偶數。(這兩個度數為奇數的點,乙個為奇數,乙個為偶數)
連通有向圖存在尤拉迴路的充要條件:對於所有的點,入度等於出度。
連通有向圖存在尤拉路徑的充要條件: 僅存在兩個點,其中乙個點的入度比出度大一,另乙個店的出度比入度大一。(出度大的為起點,入度大的為終點)
根據連通性和度數可判斷出無向圖和有向圖是否存在尤拉迴路和尤拉路徑,可用 dfs 構造尤拉迴路和尤拉路徑。
UVA10129 尤拉迴路 DFS
第一次寫部落格,以前一直沒有總結過,現在開始對自己學的東西做一些記錄吧,方便以後複習或者就當作留個腳印。筆者目前大一,水平弱弱弱 有不正確的地方或者可以改進的地方還望指出。找夥伴,有想一起學習的朋友可以一起交流交流。email zpengst outlook.com 題目大意 輸入n個單詞,判斷是否...
UVa 10129單詞(尤拉迴路)
題意是輸入n個單詞,是否可以把所有這些單詞排成乙個序列,使得每個單詞的第乙個字母和上乙個單詞的最後乙個字母相同。輸入中可以有重複單詞。由於最後只需要判斷是否能排成這樣的乙個序列,所以沒有輸入單詞後,只需要把首尾字母儲存下來,然後可以dfs深度遞迴。由於可能會有重複單詞,在這裡可以設乙個times陣列...
UVA 10129 尤拉迴路 判斷連通性
題意 輸入n個單詞,判斷是否可以使這些單詞排成一列,每個單詞的第乙個字母與上乙個單詞的最後乙個字母相同,最後乙個字母與下乙個單詞的第乙個字母相同 解法 以每個單詞的首尾字母為點,單詞為邊,dfs判斷圖的連通性,然後判斷是否存在尤拉通路 include using namespace std char...