永发信息网

汉诺塔问题(编程)

答案:4  悬赏:50  手机版
解决时间 2021-07-29 09:49
实 验 二 汉诺塔问题

题目:汉诺塔问题

1.问题描述

汉诺塔问题来自一个古老的传说:在世界刚被创建的时候有一座钻石宝塔(塔A),其上有64个金碟。所有碟子按从大到小的次序从塔底堆放至塔顶。紧挨着这座塔有另外两个钻石宝塔(塔B和塔C)。从世界创始之日起,婆罗门的牧师们就一直在试图把塔A上的碟子移动到塔C上去,其间借助于塔B的帮助。每次只能移动一个碟子,任何时候都不能把一个碟子放在比它小的碟子上面。当牧师们完成任务时,世界末日也就到了。

2.基本要求

(1)设计数据结构,表示三座宝塔和n个盘子;

(2)输出每一次移动盘子的情况;

(3)分析算法的时间性能。

3.设计思想

对于汉诺塔问题的求解,可以通过以下三个步骤实现:

(1)将塔A上的n-1个碟子借助塔C先移到塔B上。

(2)把塔A上剩下的一个碟子移到塔C上。

(3)将n-1个碟子从塔B借助于塔A移到塔C上。

显然,这是一个递归求解的过程,当n=3时的求解过程如图所示。

三座宝塔(塔A、塔B、塔C)分别用三个字符A,B,C来表示,n个盘子用从1开始的连续自然数编号。具体算法如下:

c)把塔A上剩下的一个碟子移到塔C上(d)把n-1个碟子从塔B移到塔C

图 汉诺塔求解示意图

汉诺塔算法Hanoi

void Hanoi( int n, char A, char B, char C)

{

if (n = = 1) cout<<“A→C”; //将碟子从A移到C上

else {

Hanoi (n-1,A,C,B);

cout<<“A→C”;

Hanoi (n-1,B,A,C);

}

}

最佳答案

1个盘子移动1次.


2个盘子移动3次.


3个盘子移动7次......


所以移动次数就是2^n-1. 时间复杂度就是O(2^n);


具体代码如下:


#include<iostream>
using namespace std;


int N=0;


void Hanoi( int n, char A, char B, char C)
{
if(n==1)
{
cout<<"第"<<++N<<"步"<<": 移动第"<<n<<"个盘子从"<<A<<"到"<<C<<endl;
}
else
{
Hanoi(n-1,A,C,B);
cout<<"第"<<++N<<"步"<<": 移动第"<<n<<"个盘子从"<<A<<"到"<<C<<endl;
Hanoi(n-1,B,A,C);
}
}
int main()


{
int n;
cout<<"请输入数字n以解决n阶汉诺塔问题:";
cin>>n;
Hanoi(n,'A','B','C');
cout<<"\n共需 "<<N<<"次移动盘子!"<<endl;
return 0;
}

全部回答

#include<stdio.h> void move(char x,int n,char z) { //int c; printf("move disk %i from %c to %c\n",n,x,z); } void hanio(int n,char x,char y, char z) { if(n==1) move(x,1,z); else { hanio(n-1,x,z,y);//把n-1个盘子借助z柱子从x柱子移动到y柱子上去 move(x,n,z);//把第n个盘子从x柱子移动到z柱子上去 hanio(n-1,y,x,z);//把n-1个盘子借助x柱子移动到z柱子上去 } } int main() { int n; scanf("%d",&n);//请你输入盘子的个数,建议不要输入太大! hanio(n,'a','b','c'); system("PAUSE"); return 0; }

在给你点建议,你如果你看懂了 你不防不使用递归,用迭代来做哈呢?

题目不是已经给出了程序了么?

只是输出结果不正确,需要做一点小修改:

void Hanoi( int n, char A, char B, char C)

{

if (n = = 1) cout<<A<<"→”<<C; //将碟子从A移到C上

else {

Hanoi (n-1,A,C,B);

cout<<A<<“→”<<C;

Hanoi (n-1,B,A,C);

}

}

请具体说明,你要问的问题是什么,是汉诺塔移动方法还是编程序编写方法
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
男孩第一次向女孩分手,原因是他的初恋情人回
考研需看哪些书啊
老城区洛阳山西削面馆这个地址怎么能查询到,
2009年11月1日至6日哪天搬家最好!跪求!急
谁能给个诛仙10月20好更行包?
脚像小扇子,嘴像小铲子,下水捉鱼虾,不湿小
为什么喜欢我的人,他们都不愿意娶我。难道闲
梳丸子头的那个工具是什么?
卫东区平顶山谢记羊肉胡辣汤在哪里啊,我有事
个人业务特长怎么写,个人简历表中的个人特长
天龙八部游戏里宝宝打书怎么样最容易打出7技
2个9层碧玉葫芦大约多少W?
手机情侣空间怎么解绑
如何电脑重装系统?
电脑连接的文件
推荐资讯
怎样才可以挣钱快,不是做违法的事情,才可以
有关大连的名人诗词,有关鼓励的名人诗句
假如男朋友不爱女友了他还会帮助女友吗?
到底是乘做出租车安全,还是'黑车安&apos
周渝民演过哪些电视做品
阳剑的气息有什么用,DNF死神的气息怎么得到?
卫辉市新乡新海游泳馆这个地址在什么地方,我
耒阳市衡阳上海老庙黄金(大桥路)哪位知道具体
今天,我被老师打了 作文
Administrative
武陟县焦作武陟农商银行地址在什么地方,想今
长江就像一位慈祥的母亲,用甘甜的乳汁哺育各
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?