【题解】洛谷1019 单词接龙 字符串处理+dfs深搜

题目链接:
https://www.luogu.org/problem/P1019

题目大意:
①已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”
②每个单词都最多在“龙”中出现两次
③重合部分合为一部分,且每次取两单词重合部分的最短值
④两单词不能有包含关系

我的题解:
以给出的输入输出样例为例:

输入:
5
at
touch
cheat
choose
tact
a
输出:
23

①首先对要判断的两个字符串进行判断,得到两个字符串连接后,第二个字符串减去重合部分的长度(如at和touch处理后得到4,而at和at处理后为0),由此得到表格:
【题解】洛谷1019 单词接龙 字符串处理+dfs深搜_第1张图片

得到该表格之后就可用DFS深搜一个一个试哪条龙是最长的了

按样例的数据解题过程就是:

【题解】洛谷1019 单词接龙 字符串处理+dfs深搜_第2张图片

我的代码:

#include
using namespace std;
string s[50];
char ch;
int cd[50][50];  //cd数组用来记录第二个单词除去重叠部分的值 
int vis[50];  //记录每个单词使用次数 
int ans, tmp, n;

void count(int a, int b){
	int alen = s[a].length();
	int blen = s[b].length();
	int flag; //flag记录第一个字符串末尾和第二个字符串开头是否有重叠部分 
	int i;
	for(int j=0; j>s[i];
	}
	cin>>ch;
	
	//初始化cd数组 
	for(int i=0; i

你可能感兴趣的:(DFS)