[検索]ワードソリティア

オリジナルタイトルポータル

考え


この質問は、主に検索し、文字列処理する能力にですが、また、グラフ理論の答えに思考の影を見ることができるので、これは対象の研究の比較的広い範囲です。
この質問は、その事実の焦点である、など少しの時間計算を使用して文字列処理は、二つの単語ソリティアは、のように長い文字列が速く処理関数として、検索用語を最適化する必要がなく、簡単にそのため、大規模な爆発ACを検索できるかどうかを伝えることができますこの道は、実際には本当に文字列検索の問題を調査しています。

コード


#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;
}

おすすめ

転載: www.cnblogs.com/gongdakai/p/11440317.html