题目描述
有n个单词(1≤n≤50),每个单词由2个小写字母组成,并约定第1个单词为龙头。
例如:n=7
7个单词为
aa
ac
ab
de
bh
hk
cd
接龙的方法为前一个单词的第2个字母和后一个单词的第1个字符相同,此时,可接的方法有:
aa—ac—cd 长度为3,即龙上有3个单词
aa—ab—bh—hk 长度为4
程序要求给出单词之后,求出最长龙的长度。输入
第一行一个整数n
a1b1 接下来n行,每行2个字母表示一个单词(单词字母间无空格)
a2b2
…….
anbn输出
一个整数,即最长的接长度(即龙上单词的个数)。
样例输入 Copy
8 gd bd ea ab fd be df be样例输出 Copy
3
dfs 回溯法
代码
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
typedef long long ll;
int n, c[52]{ 0 }, ans = 0;
string word[52];
void dfs(char k, int t) {
int f = 0;
for (int i = 1; i < n; ++i) {
if (!c[i] && word[i][0] == k) {
f = 1;
c[i] = 1;
dfs(word[i][1], t + 1);
c[i] = 0;
}
}
if (!f) ans = max(ans, t);
}
int main() {
cin >> n;
for (int i = 0; i < n; ++i) cin >> word[i];
dfs(word[0][1], 1);
cout << ans << '\n';
return 0;
}