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