洛谷 P1019 單詞接龍 (DFS)

2021-08-28 10:35:25 字數 1074 閱讀 5338

題目描述

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

輸入輸出格式

輸入格式:

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

輸出格式:

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

輸入輸出樣例

輸入樣例#1:5at

touch

cheat

choose

tact

a輸出樣例#1:

23說明

(連成的「龍」為atoucheatactactouchoose)

這道題目注意的要有兩個單詞之間不能有包含的關係,所以要寫乙個函式單獨判斷,然後是每個單詞在龍裡邊只能出現兩次,所以要對每乙個單詞定義乙個狀態。

這裡的dfs是以單詞為單位地進行搜尋。這一點以前沒有見過,思維有一點僵化。所以一開始對於dfs的搜尋沒有任何的思路。

#include using namespace std;

int word_len, _max = 0;

struct words words[22];

int judge(char a, char b)

if (flag) return i;

} return 0;

}void dfs (char tail, int num)

} }}int main()

cin >> start;

for (int i = 0; i < word_len; i++)

} cout << _max << endl;

return 0;

}

洛谷P1019 單詞接龍(dfs)

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

洛谷P1019單詞接龍 dfs

include include include includeusing namespace std int n int ans 0 string s 22 int u 22 int check string s1,string s2 if p 1 return i return 0 void df...

洛谷p1019 單詞接龍

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