BUAA OJ 94 双层汉诺塔【递归】

题目描述

我们来玩一个更高级的汉诺塔游戏——双层汉诺塔。双层汉诺塔游戏中,相同大小的盘都有颜色不同的两片,按照次序放在最左边的金刚柱上。 游戏的目的是把不同颜色的盘分别按照上小下大的顺序放在中间和右边的两个柱子上。在移动过程中,在移动过程中, 依旧是遵守大盘必须在小盘之下,而颜色顺序无限制。
这里写图片描述
下面给出的四个盘子的例子,当然,这个图片是不完整的,还需要把左边粉红色的盘子移到最右边的柱子上,把黄色的盘子移动到中间的柱子上。

输入

第一行输入一个整数t(t < 10),表示测试的组数。
接下来的t行,每行输入一个正偶数n(0 <n<=20),表示盘子的个数。

输出

对于每组测试数据,首先输出一行Case #X:,表示第X组测试数据。 接下来,每行都输出移动盘子的步骤,对于每次移动,以"Move from X to Y"表示,表示需要将X柱子上最顶层的盘子移动到Y柱子上,其中X,Y是A,B,C中的一个,当然,X和Y不可能相同

输入样例

2
2
4

输出样例

Case #1:
Move from A to B
Move from A to C
Case #2:
Move from A to C  
Move from A to C  
Move from A to B  
Move from A to B  
Move from C to A  
Move from C to A  
Move from B to C  
Move from A to B  
Move from A to C  

思路

  • hanoi1与普通的汉诺塔方法差不多,只是每个动作都进行两遍。
  • hanoi2调用了hanoi1.
    • 把上面的n-2个盘子按照hanoi1的方式从1移动到3.
    • 把最下面的两个盘子从1移动到2.
    • 把上面的n-2个盘子从3移动回1.
    • 这时2上放着最下面的两个盘子,拿出一个移动到3.
    • 这时最下面两个盘子已经放到了正确的位置,问题的规模从n缩减到了n-2.

代码

#include <cstdio>

using namespace std;

void print(char a
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值