码迷,mamicode.com
首页 > 其他好文 > 详细

【搜索】单词接龙

时间:2019-08-31 21:10:21      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:思想   space   max   void   substr   str   单词   ios   能力   

原题传送门

思路


这道题主要考察搜索与字符串处理的能力,但也能在答案中看到图论思想的影子,所以这是一道比较考察范围比较广的题目。
这道题的重点其实在于字符串处理,即用尽可能少的时间复杂度分辨两个单词是否可以接龙,搜索方面无需优化,只要字符串处理函数比较快,大爆搜也可以轻松AC,因此,这道搜索题其实实在考察字符串。

Code


#include<iostream>
#include<cstdio>
#include<string>
#include<vector>
#include<algorithm>
#include<cstdlib>
#include<cmath>
#include<stack>
#include<map>
using namespace std;

int e[41][41],b[41]; 
int i,j,n,maxl;
string w[41];

int l(string a,string b)
{
    for(int i=1;i<=a.length();i++)
    {
        string t=a.substr(a.length()-i,i);
        if(t.length()<=b.length()&&t==b.substr(0,t.length()))
                return b.length()-t.length();
    }
    return 0;
}

void dfs(int no,int l)
{
    if(l>maxl)
        maxl=l;
    int i;
    b[no]=1;
    for(i=0;i<=2*n;i++)
    {
        if(b[i]==0&&e[no][i]>0)
        {
            dfs(i,l+e[no][i]);
        }       
    }
    b[no]=0;
}

int main()
{
    cin>>n;
    for(i=1;i<=n;i++)
    {
        cin>>w[i]; 
        w[i+n]=w[i];
    }
    cin>>w[0];
    for(i=0;i<=2*n;i++)
        for(j=0;j<=2*n;j++)
            e[i][j]=l(w[i],w[j]);
    dfs(0,1);
    cout<<maxl;
    return 0;
}

【搜索】单词接龙

标签:思想   space   max   void   substr   str   单词   ios   能力   

原文地址:https://www.cnblogs.com/gongdakai/p/11440317.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!