https://www.luogu.org/problemnew/show/P1019
先预处理任意两个单词是否能相连及重叠长度,注意重叠长度必须小于两个字符串的长度。
然后跑一遍dfs就好了。
#include<iostream>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;
int n,overlap[25][25],vis[25],ans;
char c,word[25][50];
void init()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
int leni=strlen(word[i]),lenj=strlen(word[j]);
for(int l=1;l<leni&&l<lenj;l++)
if(0==strncmp(word[i]+leni-l,word[j],l))
{
overlap[i][j]=l;
break;
}
}
}
void dfs(int u,int tot)
{
ans=max(ans,tot);
for(int v=1;v<=n;v++)
{
if(overlap[u][v]&&vis[v]<2)
{
vis[v]++;//printf("%d %d,%d\n",u,v,tot+len[u][v]);
df

该博客介绍了如何解决洛谷P1019单词接龙的编程挑战。主要内容包括预处理步骤,即判断任意两个单词是否可以相连及它们的重叠长度,要求重叠部分不能超过单词本身的长度。接着,博主详细阐述了利用深度优先搜索(DFS)的方法来求解此问题。
最低0.47元/天 解锁文章
518

被折叠的 条评论
为什么被折叠?



