查看完整版本: 哪位高手会用递归法写这个关于"汉诺塔"的问题(C++)

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::
页: [1]
查看完整版本: 哪位高手会用递归法写这个关于"汉诺塔"的问题(C++)