单词接龙dfs洛谷

题目传送门:https://www.luogu.org/problem/show?pid=1019#sub

典型的爆搜,每次更新最大龙长度即可

搜索每个字符串编号,与已经连接好的字符串进行比较,以此往后找,若全部匹配,则可以接龙

注意:

1.自己也可以与自己相连

2.题目中所说的不能存在包含关系是连接好后的相邻两部分 并不是如果是子串就不能连接 否则第一个单词即起始字母无法连接

//Gang
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#define FOR(x,y,z) for(int x=y;x<=z;x++)
#define ll long long
struct node
{
    int l,vis;
    ];
} c[];
;
using namespace std;
void dfs(int x,int l)//x为当前连接好的单词的最后一个单词编号,l为 目前龙的长度
{
    FOR(i,,n)//枚举每个单词的编号
    {
        )//一个单词最多被用两次
            FOR(j,,c[x].l)
        {
            ])
            {
                ;
                ;
                ; d<c[x].l&&k<c[i].l; k++,d++)
                {
                    if(c[x].s[d]!=c[i].s[k])
                    {
                        flag=;
                        break;
                    }
                }
                if(flag)
                {
                    c[i].vis++;
                    dfs(i,l+c[i].l-k);
                    c[i].vis--;
                }

            }

        }
    }
    if(l>maxn)maxn=l;
}
int main()
{
    scanf("%d",&n);
    FOR(i,,n)
    {
        scanf("%s",c[i].s);
        c[i].l=strlen(c[i].s);
    }

    scanf(].s);
    c[].l=strlen(c[].s);
    dfs(,c[].l);
    printf("%d",maxn);
    ;
}
上一篇:jdk安装配置


下一篇:Free Mind » Blog Archive » Yakuake + dtach vs Screen + urxvt