题目描述
经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱 子,在一根柱子上从下往上按大小顺序摞着64片黄金圆盘。上帝命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放 大圆盘,在三根柱子之间一回只能移动一个圆盘。有预言说,这件事完成时宇宙会在一瞬间闪电式毁灭。也有人相信婆罗门至今仍在一刻不停地搬动着圆盘。恩,当 然这个传说并不可信,如今汉诺塔更多的是作为一个玩具存在。Gardon就收到了一个汉诺塔玩具作为生日礼物。
Gardon很想知道在一次游戏中使用了N个盘子时,用最少步数的每一个具体的步骤是多少
输入
一个整数,表示N(1<=N<=10)
输出
移动N个盘每一个步骤,假设第1根柱子是a,第2根柱子是b,第3根柱子是c,盘子的编号从小到大为1~n
格式 第几步,move 第几个盘 从哪根柱子到哪根柱子
例如:
1.Move 1 from a to c
样例输入 Copy
3
样例输出 Copy
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
#include<bits/stdc++.h>
using namespace std;
int k=0,n;
void hanoi(int, char, char, char);
int main(){
cin>>n;
hanoi(n,'a','c','b');
return 0;
}
void hanoi(int n, char a, char c, char b){
if(n==0){
return ;
}
hanoi(n-1,a,b,c);
k++;
cout<<k<<".Move "<<n<<" from "<<a<<" to "<<c<<endl;
hanoi(n-1,b,c,a);
}