單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的「龍」(每個單詞都最多在「龍」中出現兩次),在兩個單詞相連時,其重合部分合為一部分,例如 beastbeast和astonishastonish,如果接成一條龍則變為beastonishbeastonish,另外相鄰的兩部分不能存在包含關係,例如atat 和 atideatide 間不能相連。
輸入格式:
輸入的第一行為乙個單獨的整數nn (n \le 20n≤20)表示單詞數,以下nn 行每行有乙個單詞,輸入的最後一行為乙個單個字元,表示「龍」開頭的字母。你可以假定以此字母開頭的「龍」一定存在.
輸出格式:
只需輸出以此字母開頭的最長的「龍」的長度
輸入樣例#1:複製
5輸出樣例#1:複製attouch
cheat
choose
tact
a
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...