洛谷P1019 单词接龙题解(超详细注释)

https://www.luogu.org/problem/P1019

#include
#include
#include
using namespace std;
char s[50][15];
int check(int x,int y)
{
    for(int i=strlen(s[x])-1;i>=0;i--)//从后往前比,这样能够找到最小的重合
    {
        int j=i;
        int k=0;//第一个单词x从i往最后比,第二个单词从头开始比
        while(s[x][j]==s[y][k]&&j>head;//读入龙头
    for(int i=1;i<=n;i++)
    {
        if(s[i][0]==head)//如果有一个单词可以接到脖子位置
        {
            vis[i]++;//那么这个单词首先被用了一次
            dfs(strlen(s[i]),i);//从脖子长度(包含了头),脖子在零件库s中的位置开始
            vis[i]--;//别忘了这里的返回现场也不能疏忽
        }
    }
    printf("%d\n",ans);
    return 0;
}

转载于:https://www.cnblogs.com/ShineEternal/p/dragon.html

你可能感兴趣的:(洛谷P1019 单词接龙题解(超详细注释))