#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 dfs(int length,string s1){
if (length > ans ) ans = length;
for (int i = 1 ;i <= n;i++)
if (check(s1,s[i]) && u[i]<2) {
string s2;
s2 = s1;
int t = s[i].length();
/* for (int j = check(s1,s[i]);j >n;
for (int i = 1;i <= n;i ++)
cin>>s[i];
cin>>s[n+1];
dfs(s[n+1].length(),s[n+1]);
cout《開始犯了兩個錯誤:1.取的不是最小重疊而是最大重疊,在check中i從t3往1迴圈,這樣會導致如果s1 是abcdaskask,s2是askaskabcd的話,重疊部分算的是askask,重疊數為6,而題目要求只需要ask就可以,為3
這樣就會浪費很多位.只能過最後三個點.
第二個錯誤,check處最後忘記return 0,導致如果兩個字串沒有重疊,則一直沒有返回值,所以最後三個點一直在tle,hhh兩個錯誤乙個過了前三個點,乙個過了後三個點,但沒資料啊,還是沒用
下面講思路
兩個函式,dfs和check,dfs用來跑搜尋,check用來檢查,檢查的時候按照長度小的來…
dfs看了大佬的**,我每次都會在更新字串長度的時候把字串也更新,最後估計會變成乙個究極長的字串,但其實只需要把新字串變成a[i]就可以(不知道是不是bug,我覺的我的更保險,而且時間複雜度不會高很多).
洛谷 P1019 單詞接龍 (DFS)
題目描述 單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beastbeast和astonishastonish,如果接成一條龍則變為bea...
洛谷P1019 單詞接龍(dfs)
單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分不能存在...
洛谷p1019 單詞接龍
單詞接龍是乙個與我們經常玩的成語接龍相類似的遊戲,現在我們已知一組單詞,且給定乙個開頭的字母,要求出以這個字母開頭的最長的 龍 每個單詞都最多在 龍 中出現兩次 在兩個單詞相連時,其重合部分合為一部分,例如 beast和astonish,如果接成一條龍則變為beastonish,另外相鄰的兩部分不能...