关闭

汉诺塔

标签: 数据结构递归汉诺塔问题c语言
228人阅读 评论(0) 收藏 举报
分类:

汉诺塔问题思路:

如果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;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:22165次
    • 积分:667
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:24篇
    • 译文:0篇
    • 评论:13条
    文章分类
    最新评论