洛谷P1019 [NOIP2000]单词接龙(DFS)

时间:2019-08-17
本文章向大家介绍洛谷P1019 [NOIP2000]单词接龙(DFS),主要包括洛谷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;
}
P1019 code

原文地址:https://www.cnblogs.com/Hoyoak/p/11367399.html