dfs 成語接龍

2021-09-01 17:09:33 字數 1275 閱讀 9572

單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的「龍」(每個單詞都最多在「龍」中出現兩次),在兩個單詞相連時,其重合部分合為一部分,例如 beastbeast和astonishastonish,如果接成一條龍則變為beastonishbeastonish,另外相鄰的兩部分不能存在包含關係,例如atat 和 atideatide 間不能相連。

輸入格式:

輸入的第一行為乙個單獨的整數nn (n \le 20n≤20)表示單詞數,以下nn 行每行有乙個單詞,輸入的最後一行為乙個單個字元,表示「龍」開頭的字母。你可以假定以此字母開頭的「龍」一定存在.

輸出格式:

只需輸出以此字母開頭的最長的「龍」的長度

輸入樣例#1:複製

5

attouch

cheat

choose

tact

a

輸出樣例#1:複製

23
(其實也就是讀題問題。這些都是我所犯的錯誤,希望大家能注意一下)

好了。然後是解題思路。

首先是預處理,用yc[i][j]來儲存 第i個單詞 後連線 第j個單詞 的 最小重疊部分(mt函式)

後來預處理完了之後就是深搜:

先從第乙個到最後乙個單詞看一看哪個單詞是指定字母為開頭的,作為深搜的第乙個單詞,同時標記使用過一次(vis[i]++)

然後繼續搜吧。

#include#include#include#includeusing namespace std;

int n;//單詞數

string tr[30];//儲存字串

int yc[30][30];//兩個字母的最小重疊部分

int vis[30];//判斷單詞使用頻率.

int mt(int x, int y)

if(jx==false)

return;

}int main()

}//預處理yc陣列。yc[i][j]就表示,i單詞後連線乙個j單詞的最小重疊部分

//比如 i表示at,j表示att. yc[i][j]就為2 但是yc[j][i]就為0.

//預處理是乙個關鍵

for(int i=1;i<=n;i++)

} printf("%d",ans);

return 0;

}

成語接龍 dfs

成語接龍 time limit 1000 ms memory limit 32768 k total submit 92 17 users total accepted 23 14 users rating special judge no description 給出n個成語,通過成語接龍,求接出...

探索成語接龍

網上有個成語接龍,是以胸有成竹開頭的,接了1712個,覺得很強。自己沒事弄了個sql的程式,調整詞頻演算法後能在3分鐘內計算出 7487個,遠遠超過了網上的版本 start initial.total 38129 words 使用網上流傳的成語庫 finish initial,cost time 4...

成語接龍python

用python編寫乙個成語接龍 讀取 成語大全.txt f open 成語大全.txt r encoding ansi 將檔案中每一行讀取到txt中 txt f.readlines 將成語與其釋義分開,儲存到idiom中 idiom for j in range len txt if txt j n...