洛谷P1019 [NOIP2000]单词接龙(DFS)
分析:是一道DFS的简单题,DFS的思想是穷举,那我们就把所有可能的龙都穷举出来,取长度最长的那个,
难点在于字符串匹配,即一个字符串接在另一个字符串后面的代码实现。
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; char s[50][50]; int n,ans,len=1; int vis[50]; inline void dfs(int k) { ans=max(ans,len); for(int i=1;i<=n;i++) { if(vis[i]<2) { for(int j=0;j<strlen(s[k]);j++) { if(s[i][0]==s[k][j]) { int cnt1=0,cnt2=j; while(s[i][cnt1]==s[k][cnt2]&&cnt2<strlen(s[k])) cnt1++,cnt2++; if(cnt2==strlen(s[k])) { vis[i]++; len+=strlen(s[i])-cnt1; dfs(i); vis[i]--; len-=strlen(s[i])-cnt1; } } } } } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) cin>>s[i]; cin>>s[0]; dfs(0); printf("%d",ans); return 0; }