題目描述
單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的「龍」(每個單詞都最多在「龍」**現兩次),在兩個單詞相連時,其重合部分合為一部分,例如 beastbeast和astonishastonish,如果接成一條龍則變為beastonishbeastonish,另外相鄰的兩部分不能存在包含關係,例如atat 和 atideatide 間不能相連。
輸入輸出格式
輸入格式:
輸入的第一行為乙個單獨的整數n
nn (nnn≤
\le≤ 20) 表示單詞數,以下 n
nn 行每行有乙個單詞,輸入的最後一行為乙個單個字元,表示「龍」開頭的字母。你可以假定以此字母開頭的「龍」一定存在.
輸出格式:
只需輸出以此字母開頭的最長的「龍」的長度
輸入樣例:dfs輸出樣例:523
attouch
cheat
choose
tact
a
1.先找到有開頭字母的那乙個字串咯(其實也就直接把那個字元當成乙個字串串了)
2.然後for迴圈遍歷一遍,看有沒有可以接上的,如果有的話就接上
3.接上之後要怎麼辦??繼續接嘛,一直接到接不了為止,然後再回溯,嘗試另外的接法 嗷~~
4.每次接到不能接的時候會得到乙個新的串串,這時更新答案。
#include
#include
using namespace std;
int ans =0;
int n;
//ans為答案,n為輸入的組數
const
int maxn =
100;
//n <= 20
string strs[maxn]
;//儲存每一組的字串
string start;
//開始的字元
int vis[maxn]
;//標記字串是否使用了兩次
string result;
//這是最終的最長字串
bool can_be_connected
(string s1,string s2,
int k)
return
true
;//如果都一樣就返回true
}void
connect
(string& s1,string s2,
int k)
void
dfs(string cur)}}
}int
main()
ps:上面這段**在洛谷可以a過去
但是有的編譯器會執行出錯(可能是沒注意到溢位之類的問題)
還望dalao指正呀
洛谷p1019 單詞接龍
單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分不能...
洛谷p1019單詞接龍
單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beastbe ast 和 astonishas toni sh,如果接成一條龍則變為 be...
洛谷 P1019 單詞接龍
題目描述 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如be ast bea st 和astoni sha st onis h,如果接成一條...