洛谷 P1019 单词接龙 题解

洛谷 P1019 单词接龙 题解_第1张图片
这道题我自己做的时候用的是以字符串为参数进行dfs,但是搞错了
看了dalao的题解后发现,原来不用真的去进行字符串拼接,定义一个数组保存单词之间的重叠数目就好了,然后用dfs穷举出所有的"龙",看最长的"龙"是多长 这里一定要弄清楚字符串的下标 否则会出很多莫名其妙的错误

#include 
#define max_int 30
using namespace std;
int vis[max_int] = {0};
int re[max_int][max_int];
string m[max_int];
char goal;
int an , ans=-1,n;
//x y 都为单词的编号 
int rl(int x,int y){
	int ry=0;
	bool is = true;
	//i为龙的重叠开始下标 
	for(int i=m[x].length()-1;i>=0;i--){
		//k是从龙重叠开始下标往后一直到末尾 
		for(int k=i;k=2) return false;
	//无重叠部分 
	if(re[x][y] == 0) return false;
	if(re[x][y] == m[x].length() || re[x][y] == m[y].length()) return false;
	return true;
}

//x为单词编号 
void dfs(int x){
	//先把find定义成false  如果后面变成true了 
	bool find = false;
	//遍历 
	for(int i=0;i> n;
	for(int i=0;i> m[i];
	}
	for(int i=0;i> goal;
	for(int i=0;i

你可能感兴趣的:(算法笔记)