Free-Rader 2008-7-5 21:06
哪位高手会用递归法写这个关于"汉诺塔"的问题(C++)
有A,B,C三个座.最初在A座上有64个盘子,从下到上所放盘子的大小逐渐减小。和尚要把盘子从A座移至C座,每次只能移动一个盘子,且移动过程中不能把大盘放在小盘上面,移动中可利用B座来暂时放置盘子。编写一个程序,打印出移动的步骤。
以只有三个盘子为例,执行结果如下:
#
###
#####
--------------------------------------------------------------------------------------
###
##### #
--------------------------------------------------------------------------------------
##### ### #
--------------------------------------------------------------------------------------
#
##### ###
--------------------------------------------------------------------------------------
#
### #####
--------------------------------------------------------------------------------------
#
###
#####
--------------------------------------------------------------------------------------
提示:先用递归法将问题简化,则移动N个盘子的问题简化为移动N-1个盘子的问题将N-1个盘子从A移到C上,B作临时存放处。
大家看看这个问题吧,是书上的,请大家讨论一下,给个思路或者直接写出程序来吧~~::26:: ::26:: ::26::
Free-Rader 2008-7-13 13:15
没人会吗???大家讨论一下吧~~~~::08::::08::::08::::08::::08::
帝国墨子麟 2008-7-15 11:08
把大致过程给你:
void HanoiTower(int disk_n,char from_disk,char temp_disk,char to_disk)
{
if(disk_n==1)
//只有一个盘时,直接从from_disk移到to_disk
cout<<"将disk1从"<<from_disk<<"移到"<<to_disk<<endl;
else
{
//将disk_n-1个盘从from_disk移到temp_disk
HanoiTower(disk_n-1,from_disk,to_disk,temp_disk);
//将最低的盘从from_disk移到to_disk
cout<<"将disk"<<disk_n<<"从"<<from_disk<<"移到"<<to_disk<<endl;
//将disk_n-1个盘从temp_disk移到to_disk
HanoiTower(disk_n-1,temp_disk,from_disk,to_disk);
}
}
Free-Rader 2008-7-16 23:00
是你没理解题意,还是我看不懂你在写什么??:face18:face18:face18:face18:face17:face17:face5:face5
jerryshow 2008-7-18 12:57
很难理解 貌似跟数据库里的堆栈有得一比
强悍的人才能做 貌似在数据库的堆栈看到过
zoutommy 2008-7-22 20:01
[quote]原帖由 [i]帝国墨子麟[/i] 于 2008-7-15 11:08 发表 [url=http://hackerxfiles.net/redirect.php?goto=findpost&pid=845104&ptid=110140][img]http://hackerxfiles.net/images/common/back.gif[/img][/url]
把大致过程给你:
void HanoiTower(int disk_n,char from_disk,char temp_disk,char to_disk)
{
if(disk_n==1)
//只有一个盘时,直接从from_disk移到to_disk
cout [/quote]
代码诚如3#
利用对该函数的递归调用,以文字形式显示每一步的走法
[code]if(disk_n==1)
cout<<"将disk1从"<<from_disk<<"移到"<<to_disk<<endl;/*假设from_disk=1,to_disk=3,这句就是在屏幕上显示将disk1从1移到3*/
//只有一个盘时,直接从from_disk移到to_disk
[/code]
这个问题现在属于经典问题啦
死神的眼睛 2008-7-31 10:18
刚刚开始学C,还看不懂,等我看懂了再告诉你把::01:: ::01::