Kai’blog

技术博客

【搜索】单词接龙

原题传送门

思路


这道题主要考察搜索与字符串处理的能力,但也能在答案中看到图论思想的影子,所以这是一道比较考察范围比较广的题目。
这道题的重点其实在于字符串处理,即用尽可能少的时间复杂度分辨两个单词是否可以接龙,搜索方面无需优化,只要字符串处理函数比较快,大爆搜也可以轻松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;
}
posted @ 2019-08-31 20:27  Kai02  阅读(253)  评论(0编辑  收藏  举报
Copyright © 2019-2020 拱大垲. All rights reserved.