單詞接龍 DFS

2021-10-08 22:51:23 字數 1077 閱讀 7832

原題鏈結

單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲。

現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的「龍」,每個單詞最多被使用兩次。

在兩個單詞相連時,其重合部分合為一部分,例如 beast 和 astonish ,如果接成一條龍則變為 beastonish。

我們可以任意選擇重合部分的長度,但其長度必須大於等於1,且嚴格小於兩個串的長度,例如 at 和 atide 間不能相連。

輸入格式

輸入的第一行為乙個單獨的整數 n 表示單詞數,以下 n 行每行有乙個單詞(只含有大寫或小寫字母,長度不超過20),輸入的最後一行為乙個單個字元,表示「龍」開頭的字母。

你可以假定以此字母開頭的「龍」一定存在。

輸出格式

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

資料範圍

n≤20

輸入樣例:5at

touch

cheat

choose

tact

a輸出樣例:

23提示

連成的「龍」為 atoucheatactactouchoose。

一道dfs的題目,要注意的是狀態是一整個整體,所以要回溯!

首先計算出,每個單詞前字尾重疊的最小單詞數,然後dfs一遍開頭的單詞

#include

#include

using

namespace std;

const

int n =25;

int n,ans,used[n]

,con[n]

[n];

string a[n]

;char head;

void

set(

)//計算每個單詞前字尾重疊最小單詞數,儲存在con陣列中}}

}}intdfs

(int cur,

int len)

//cur 當前單詞下標,len 當前拼接的長度}}

intmain()

題解 單詞接龍(DFS)

單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞 且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 現兩次 在兩個單詞相連時,其重合部分合為一部分,例如beast和astonish,如果接成一條龍則變為beastonish 另外相鄰的兩部分不能存在包...

CODEVS 1018 單詞接龍(DFS)

題目大意 題目描述 description 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如beast和astonish,如果接成一條龍則變為...

Codevs 1018 單詞接龍 (DFS)

題目描述 description 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如beast和astonish,如果接成一條龍則變為beast...