汉诺塔游戏
题目背景
汉诺塔由编号1到n且大小不同的圆盘和3柱子a,b,c组成,编号越小,盘子越小。开始时,这n个圆盘由大到小依次套在a柱上。要求把a柱上n个圆盘按下述规则移到c柱上。
题目描述
(1)一次只能移一个圆盘,它必须位于某个柱子的顶部。
(2)圆盘只能在三个柱子上存放。
(3)任何时候不允许大盘压小盘。
将这n个盘子用最少移动次数从a柱移动到c柱上,输出每一步的移动方法。
输入格式
只有一行,一个整数n(1<=n<=20),表示盘子的数量。
输出格式
输出若干行,每行的格式是“步数.Move盘子编号from源柱to目标柱”。
样例 #1
样例输入 #1
3
样例输出 #1
1. Move 1 from a to c
2. Move 2 from a to b
3. Move 1 from c to b
4. Move 3 from a to c
5. Move 1 from b to a
6. Move 2 from b to c
7. Move 1 from a to c
我的代码:
```c
#include<iostream>
using namespace std;
int step;
void hanoi(int n,char a,char b,char c)
{
if(n==1)cout<<++step<<" .Move "<<n<<" from "<<a<<" to "<<c<<endl;
else
{
hanoi(n-1,a,c,b);
cout<<++step<<" .Move "<<n<<" from "<<a<<" to "<<c<<endl;
hanoi(n-1,b,a,c);
}
}
int main()
{
int n;
cin>>n;
hanoi(n,'a','b','c');
return 0;
}