top1编程
← 返回题目
题解

【基础】单词接龙

1 条题解

  • 0
    @ 2026-7-29 0:17:18
    #include <iostream>
    #include <string>
    using namespace std;
    
    int n;                  // 单词总数
    string words[50];       // 存储所有单词
    bool used[50] = {false};// 标记单词是否已使用
    int max_len = 1;        // 最长龙的长度(至少为1,即龙头本身)
    
    // 深度优先搜索:当前龙的最后一个单词下标为last,当前长度为len
    void dfs(int last, int len) {
        // 更新最长长度
        if (len > max_len) {
            max_len = len;
        }
        
        // 尝试用所有未使用的单词接龙
        for (int i = 0; i < n; i++) {
            // 如果单词未使用,且能接在当前龙的后面
            if (!used[i] && words[last][1] == words[i][0]) {
                used[i] = true;          // 标记为已使用
                dfs(i, len + 1);         // 递归继续接龙
                used[i] = false;         // 回溯:恢复未使用状态
            }
        }
    }
    
    int main() {
        cin >> n;
        for (int i = 0; i < n; i++) {
            cin >> words[i];
        }
        
        // 龙头是第一个单词,标记为已使用后开始搜索
        used[0] = true;
        dfs(0, 1);
        
        cout << max_len << endl;
        return 0;
    }
    
    • 1