洛谷 P1019 单词接龙

总体思路:

首先将给定的开头字符(某个单词)依次和其他单词的首字母进行比较,找到相同的字母后标记并检索重复的字母

#include 
#include
#include
using namespace std;
int n;
string a[25];//string类的数组
int b[25];//单词出现的次数
int ans,nom=1;//长度
void dfs(int x)
{
    ans=max(ans,nom);
     for(int i=1;i<=n;i++)//在输入的单词中查找
     {
         if(b[i]<2)
         {
             for(int j=0;jl1)//
                        {//判断是否有重叠部分
                            l1++;
                            l2++;
                        }
                        if(l1>=a[x].length())
                        {
                            nom+=a[i].length()-l2;
                            b[i]++;
                            dfs(i);//
                            nom-=a[i].length()-l2;//在选定某个单词作为比较模型时,如果在其他单词中找不到可连接的单词,则回溯,重新找其他单词。
                            b[i]--;
                        }
                 }
             }
         }

     }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    cin>>a[0];
    dfs(0);
    cout<

 

你可能感兴趣的:(洛谷 P1019 单词接龙)