【搜索】单词接龙

原题传送门

思路


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

Code


#include
#include
#include
#include
#include
#include
#include
#include
#include
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<

转载于:https://www.cnblogs.com/gongdakai/p/11440317.html

你可能感兴趣的:(【搜索】单词接龙)