UVA10129 尤拉迴路 DFS

2021-08-30 17:48:43 字數 1445 閱讀 2255

第一次寫部落格,以前一直沒有總結過,現在開始對自己學的東西做一些記錄吧,方便以後複習或者就當作留個腳印。

筆者目前大一,水平弱弱弱…有不正確的地方或者可以改進的地方還望指出。

找夥伴,有想一起學習的朋友可以一起交流交流。email:   [email protected]

題目大意:輸入n個單詞,判斷是否能把所有單詞連線成乙個串,使得每個單詞首字母與前乙個單詞尾字母相同。

1:把每個單詞看作一座橋,二十六個英文本母看作節點,儲存成無向圖,還要記錄每個節點出度入度。

2:判斷整個有向圖的奇點數是否大於2,大於2則不存在尤拉道路,存在則走第三步。

3:判斷圖的連通性,筆者目前只會用dfs(並查集還沒學),看作無向圖(稍微提高效率)。若連通則存在尤拉道路。

思路講起來簡潔,然而每次實現都會遇到各種問題。(筆者太弱了)

若奇點數為2,判斷連通性的時候一定要注意起點是出度大於入度的那個節點。(如果要列印路徑)

若奇點數為0,(容易忽略)一定要找乙個存在橋的節點作為起點。

話不多說,直接上ac**。看了下各路大神的**,都這麼短!!!都不好意思貼上來了。

不太想寫注釋了,**如下。

#include#include#include#includeusing namespace std;

bool g[26][26];

int out_cnt[26],in_cnt[26];

void dfs(int in)

}}bool is_cncted(int in)

int main()

int sp_in=0,sp_cnt=0,flag=1;

for(int i=0; i<26; ++i)

if(in_cnt[i]!=out_cnt[i])

if(++sp_cnt>2||abs(in_cnt[i]-out_cnt[i])!=1)

else if(sp_cnt==1)

sp_in=i;

else if(in_cnt[sp_in]-out_cnt[sp_in]+in_cnt[i]-out_cnt[i])

if(flag)

for(int i=0; i<26; ++i)

if(out_cnt[i])

if(flag)

cout<<"ordering is possible."

cout<<"the door cannot be opened."<}

return 0;

}

Uva10129 尤拉迴路

play on wordsuva 10129 ordering is possible.the door cannot be opened.1 include2 include3 include4 const int maxn 26 5 using namespace std 6 7尤拉迴路 8圖是...

UVa 10129單詞(尤拉迴路)

題意是輸入n個單詞,是否可以把所有這些單詞排成乙個序列,使得每個單詞的第乙個字母和上乙個單詞的最後乙個字母相同。輸入中可以有重複單詞。由於最後只需要判斷是否能排成這樣的乙個序列,所以沒有輸入單詞後,只需要把首尾字母儲存下來,然後可以dfs深度遞迴。由於可能會有重複單詞,在這裡可以設乙個times陣列...

UVA 10129 尤拉迴路 判斷連通性

題意 輸入n個單詞,判斷是否可以使這些單詞排成一列,每個單詞的第乙個字母與上乙個單詞的最後乙個字母相同,最後乙個字母與下乙個單詞的第乙個字母相同 解法 以每個單詞的首尾字母為點,單詞為邊,dfs判斷圖的連通性,然後判斷是否存在尤拉通路 include using namespace std char...