P1019 單詞接龍 DFS 字串

2021-08-08 21:44:10 字數 1471 閱讀 5452

題目鏈結!

題目描述

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

輸入輸出格式

輸入格式:

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

輸出格式:

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

輸入輸出樣例

輸入樣例#1:

5 at

touch

cheat

choose

tact

a輸出樣例#1:

23 (連成的「龍」為atoucheatactactouchoose)

思路:

dfs解字串,大暴力,主義回溯和**中給的提示,現在開始補習搜尋知識。

#pragma comment(linker, "/stack:1024000000,1024000000") //進行手動擴棧,這樣就不會引起爆棧

#include

#include

#include

#include

#include

#include

#define maxn 25

using

namespace

std;

typedef

long

long ll;

map ma; //標記出現的串

map ma1; //每個串用的次數

char str[25][maxn];

int res = 0, n;

void dfs(char * s, int l)

s1[i + 1] = '\0'; //切記本處

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

s2[i + 1] = '\0';

if(strcmp(s2, s1)) continue;

if(ma[s3]) continue;

l = l + cnt - i - 1;

ma1[str[j]]++;

dfs(str[j], l);

l = l - cnt + i + 1;

ma1[str[j]]--;}}

}int main()

char ch[maxn];

scanf("%s", ch);

dfs(ch, 1);

printf("%d\n", res);

return

0;}

P1019 單詞接龍(dfs)

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

P1019 單詞接龍 DFS

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

P1019 單詞接龍(DFS 回溯)

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