简单单词接龙

题目描述

有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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值