zoukankan      html  css  js  c++  java
  • 汉诺塔递归实现

         问题实现:当n==1时候只需将盘从A移到C即可,那摩当规模为n时候,可以转化为规模为n-1的情况

          1,借助C,将n-1个圆盘从A移到B

          2,将第n个盘从A移动到C

          3,借助A,将n-1个盘从B移动到C

    /*下面代码的时间复杂度为O(2^n)*/

    //hannoi.cpp
    //--------------------------------------------------
    #include<iostream>
    using namespace std;
    void MOVE(int n, char x,char y);
    void hannoi(int n, char A, char B, char C);
    int main(){
    int n;
    while (cin >> n){
    hannoi(n,'A','B','C');
    }
    }
    void MOVE(int n, char x,char y){
    /*将第n个铜盘从x移到y*/
    cout << "将" << n << "从" << x << "移到" << y << endl;
    }
    void hannoi(int n, char A, char B, char C){
    /*表示将第n个铜盘借助B由A移动到C*/
    if (n == 1){
    /*此处为递归的结束条件*/
    MOVE(1, A, C);
    }
    else{
    hannoi(n - 1, A, C, B); /*将n-1个圆盘借助C从A移动到C*/
    MOVE(n, A, C);/*将第n个圆盘从A移动到C*/
    hannoi(n - 1, B, A, C);
    }
    }

  • 相关阅读:
    camp训练day2
    LCA板子题
    牛客多校第一场
    P1063 能量项链 区间DP
    64. Minimum Path Sum
    46. Permutations
    216. Combination Sum III
    62. Unique Paths
    53. Maximum Subarray
    22. Generate Parentheses
  • 原文地址:https://www.cnblogs.com/td15980891505/p/4439404.html
Copyright © 2011-2022 走看看