1869: 汉诺塔

题目描述

      经典的汉诺塔问题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典故。汉诺塔来源于印度传说的一个故事,上帝创造世界时作了三根金刚石柱 子,在一根柱子上从下往上按大小顺序摞着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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值