5 solutions

  • 0
    @ 2025-4-20 9:24:32
    #include <bits/stdc++.h>
    using namespace std;
    
    // 汉诺塔递归函数
    // 参数说明:
    // n: 当前要移动的盘子数量
    // from: 起始柱
    // to: 目标柱
    // aux: 辅助柱
    void hanoi(int n, char from, char to, char aux) {
        if (n == 1) {
            // 当只剩一个盘子时,直接移动到目标柱
            cout << from << "->" << n << "->" << to << endl;
            return;
        }
        
        // 1. 将上方 n-1 个盘子从起始柱移动到辅助柱(借助目标柱)
        hanoi(n - 1, from, aux, to);
        
        // 2. 将第 n 个盘子从起始柱移动到目标柱
        cout << from  << "->" << n << "->" << to << endl;
        
        // 3. 将 n-1 个盘子从辅助柱移动到目标柱(借助起始柱)
        hanoi(n - 1, aux, to, from);
    }
    
    int main() {
        int n;
        cin >> n;
        char a,b,c;
        cin >> a >> b >> c;
        // 调用汉诺塔函数,初始从A柱移动到C柱,B柱作为辅助
        hanoi(n, a, b, c);
        
        return 0;
    }
    

    Information

    ID
    940
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    3
    Tags
    (None)
    # Submissions
    110
    Accepted
    34
    Uploaded By