汉诺塔

汉诺塔问题思路:

如果n为1直接把汉诺塔从A移动到C

如果n为多个的话,先把n个汉诺塔分为1到n-1和n俩部分,分三步走(1)把1到n-1号汉诺塔从A移动到B

 (2)把n号汉诺塔从A移动到C

 (3)把1到n-1号汉诺塔再从B移动到C




源码:


#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */


int count=1; 
void moveTower(int n,char *from,char *depend, char *too){    //把高度为n的汉诺塔从from移动到to,借助于depend 
//如果只有一个高度为1的汉诺塔,要从from移动到to,直接移动到to 
if(n==1){
cout<<"第"<<count<<"步:1"<<"从"<<from<<"移动到"<<too<<endl;
count++;

else{
//如果是多个汉诺塔要从from移动到to,先把上面n-1的汉诺塔从from移动到depend 
moveTower(n-1,from,too,depend);
//再把最底层的汉诺塔从from移动到to
cout<<"第"<<count<<"步:"<<n<<"从"<<from<<"移动到"<<too<<endl; 
count++;
//最后把刚刚移动到depend上面的汉诺塔全部移动到to上面
moveTower(n-1,depend,from,too);



}


int main(int argc, char *argv[]) {
int n; //汉诺塔高度
cin>>n;

moveTower(n,"A","B","C");
 
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值