CODEVS 1018 單詞接龍(DFS)

2021-06-27 02:49:26 字數 1311 閱讀 7897

題目大意:

題目描述 description

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

輸入描述 input description

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

輸出描述 output description

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

樣例輸入 sample input

attouch

cheat

choose

tacta

樣例輸出 sample output

23    

資料範圍及提示 data size & hint

(連成的「龍」為atoucheatactactouchoose)                                       

思路:一開始在看到這個題目的時候,確實是一點思路都沒有,題目是前後字母有重複的單詞可以連線。並且最後要計算長度,這邊需要注意的是,連線的時候只需要重複最小的部分就可以了,不用全部部分,例如ccaba,ababab,連線之後是ccabababab,而不是ccababab。另外便是可以預先處理好,兩兩字元之間可以連線的字元長度,並且存入com[i][j]當中,不需要考慮是什麼字元。只需要考慮有或者沒有。之後進行深搜即可。

**:

#include#include#include#includeusing namespace std;

int com[30][30];

char str[30][110];

int n,m;

int vis[30];

int ans=0;

void getcom(int a,int b)

{ int len1=strlen(str[a]);

int len2=strlen(str[b]);

for(int i=len1-1;i>=0;i--)

{bool flag=1;

if(len1-i==len2)break;

for(int j=i;j>n;

char c;

for(int i=0;i

CODEVS 1018單詞接龍

新穎方法 hljs cpp include include using namespace std struct ag 25 25 int cut 25 vis 25 trytry,n,maxn 1 char a 25 20 b int catchdragon char x,char y,int m...

codevs 1018 單詞接龍

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

codevs1018單詞接龍

2000年noip全國聯賽普及組noip全國聯賽提高組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 題目描述 description 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞...