zoukankan      html  css  js  c++  java
  • 汉诺塔问题

    汉诺塔问题
    时间限制:1秒 内存限制:128M
    题目描述


    设有n个大小不等的中空圆盘,按照从小到大的顺序叠套在立柱A上,另有两根立柱B和C。现在要求把全部圆盘从A柱(称为源柱)移到C柱(称为目标柱),移动过程中可借助B柱(称为中间柱)。移动时有如下的要求: 



    1) 一次只许移动一个盘。 



    2) 任何时候、任何柱子上不允许把大盘放在小盘上边 



    3) 可使用任意一根立柱暂存圆盘。 



    问:如何用最少步数实现n个盘子的移动?请打印出具体的移动方案

    输入描述


    一行一个正整数n,1<=n<=18

    输出描述


    输出若干行,第i行表示第i布的移动方案

    样例
    输入
    3
    输出
    A->C
    A->B
    C->B
    A->C
    B->A
    B->C
    A->C

    #include<iostream>
    using namespace std;
    void h(int s,char a,char b,char c)
    {
    if(s==1)
    {
    cout<<a<<"->"<<c<<endl;
    }
    else
    {
    h(s-1,a,c,b);
    cout<<a<<"->"<<c<<endl;
    h(s-1,b,a,c);
    }
    }
    int main()
    {
    int n;
    cin>>n;
    h(n,'A','B','C');
    return 0;
    }

  • 相关阅读:
    Markdown常用语法
    课程及资源链接
    cpa-会计
    高管具备的能力
    JDK并发包-copy
    Guava工具类学习-copy
    java开发注解大全-copy
    Codeforces Round #703 (Div. 2)
    [ABC200E] Minflip Summation
    Codeforces Round #720 (Div. 2)
  • 原文地址:https://www.cnblogs.com/tcwbob/p/13088402.html
Copyright © 2011-2022 走看看