題意:輸入一系列單詞,輸入乙個字母,求出以這個字母開頭,由輸入單詞拼接成的乙個最長字串的長度,每個單詞可以出現兩次,兩個拼接在一起的單詞帶有重疊部分但是彼此不能有包含關係
這是一道dfs的題目,之前想到dfs, bfs總是自覺的想到乙個二維陣列找路徑之類的問題,剛看這題時完全想不到如何用dfs求解,這道題讓我更加了解了dfs搜尋的本質,其實和暴力列舉類似,就是地毯式搜尋,搜尋每一種情況
思路是先對輸入資料做一次處理,算出它們每乙個單詞與其它單詞重疊部分的最小長度(因為最後要求拼接成最長的乙個單詞)
然後遍歷每個單詞,若首字母為給定字母則開始搜尋(若理解不了這裡搜尋的意思,可以將其看成列舉,多做幾道入門經典dfs題目可對其有更深理解)
#includeusingnamespace
std;
intans;
intn;
int vis[20
];int cl[20][20
];char
c;string words[20
];int commenlength(string a, string
b)else
}if(flag)
minlen = min(i+1
, minlen);
} return minlen == 50?0
: minlen;
}void dfs(int length, int
idx)}}}
intmain()
} cin >>c;
for(int i=0; i)
} cout
<
return0;
}
洛谷p1019 單詞接龍
單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分不能...
洛谷p1019單詞接龍
單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beastbe ast 和 astonishas toni sh,如果接成一條龍則變為 be...
洛谷 P1019 單詞接龍
題目描述 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如be ast bea st 和astoni sha st onis h,如果接成一條...