A83467.单词接龙求助!!!
2026-08-21 20:30:14
发布于:江苏
5阅读
0回复
0点赞
10分求助
#include <bits/stdc++.h>
using namespace std;
string s[20];
int use[20],len = 0,n;
int check(string s1,string s2)
{
for(int i = 1;i <= min(s1.length(),s2.length());i ++)//重叠长度从1开始,知直到最短字符长度-1(不能包含)
{
int flag = 1;
for(int j = 0;j < i;j ++)
{
if(s1[s1.length() - i + j] != s2[j]) flag = 0;//逐个判断是否相等
}
if(flag) return i;
}
return 0;//无重叠部分,返回0;
}
void solve(string s_now,int l_now)
{
len = max(l_now,len);//更新最大长度
for(int i = 0;i < n;i ++)
{
if(use[i] >= 2) continue;//该字符使用次数需小于2
int c = check(s_now,s[i]);//获取重叠长度
if(c > 0)//有则开始dfs
{
use[i] ++;
solve(s[i],l_now + s[i].length() - c);
use[i] --;
}
}
}
int main()
{
cin >> n;
for(int i = 0;i <= n;i ++) use[i] = 0,cin >> s[i];//s[n]为开始字符
solve("" + s[n],1); //报错
cout << len;
return 0;
}
这里空空如也






有帮助,赞一个