洛谷P1019 单词接龙

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int n,maxn,side[21][21],visited[20];
string word[21];//把首字母也当做一个单词,但只能在开头用一次
void calc(int i,int j)//计算word[j]接到word[i]后面增加的长度
{
	int len=word[i].length()j) calc(j,i);//i接j和j接i两种情况
}
void dfs(int i,int len)
{
	int j;
	if(len>maxn)
	  maxn=len;
	for(j=0;j0&&visited[j]<2)
	 {
	 	  visited[j]++;
	 	  dfs(j,len+side[i][j]);//传递新的长度
	 	  visited[j]--;
	 }
}
int main()
{
	cin>>n;
	for(int i=0;i<=n;i++)
	{
		cin>>word[i];
		for(int j=0;j<=i;j++)
		calc(i,j);
	}
	dfs(n,1);
	cout<

你可能感兴趣的:(字符串,深度优先搜索)