1、B站视频链接:B20 DFS 单词接龙_哔哩哔哩_bilibili
题目链接:[NOIP2000 提高组] 单词接龙 - 洛谷
#include <bits/stdc++.h>
using namespace std;
const int N=25;
int n,ans;
int used[N];//每个单词的使用次数
string word[N];
void dfs(string s){
int ls=s.size();
ans=max(ans,ls);
for(int i=0;i<n;i++){//枚举每个单词
string w=word[i];
int lw=w.size();
for(int j=1;j<ls&&j<lw;j++){//保证当前串与单词不包含
if(used[i]<2&&s.substr(ls-j)==w.substr(0,j)){
used[i]++;
dfs(s+w.substr(j));//dfs新串
used[i]--;//回溯时恢复现场
break;//已经是最长,直接结束
}
}
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++)cin>>word[i];
string start;cin>>start;
start="*"+start;
dfs(start);
cout<<ans-1<<endl;//因为有加了*所以减一
return 0;
}