打印

[讨论] 哪位高手会用递归法写这个关于"汉诺塔"的问题(C++)

哪位高手会用递归法写这个关于"汉诺塔"的问题(C++)

有A,B,C三个座.最初在A座上有64个盘子,从下到上所放盘子的大小逐渐减小。和尚要把盘子从A座移至C座,每次只能移动一个盘子,且移动过程中不能把大盘放在小盘上面,移动中可利用B座来暂时放置盘子。编写一个程序,打印出移动的步骤。
以只有三个盘子为例,执行结果如下:
         #
      ###
   #####
--------------------------------------------------------------------------------------
         
      ###
   #####                                                              #     
--------------------------------------------------------------------------------------

        
      
   #####                     ###                                 #
--------------------------------------------------------------------------------------

                           
                                     #
   #####                    ###  
--------------------------------------------------------------------------------------

        
                                     #
                                  ###                             #####
--------------------------------------------------------------------------------------

                                                                          #
                                                                       ###
                                                                    #####
--------------------------------------------------------------------------------------
提示:先用递归法将问题简化,则移动N个盘子的问题简化为移动N-1个盘子的问题将N-1个盘子从A移到C上,B作临时存放处。

大家看看这个问题吧,是书上的,请大家讨论一下,给个思路或者直接写出程序来吧~~

TOP

没人会吗???大家讨论一下吧~~~~
把大致过程给你:
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);
        }
}

TOP

是你没理解题意,还是我看不懂你在写什么??

很难理解 貌似跟数据库里的堆栈有得一比

强悍的人才能做 貌似在数据库的堆栈看到过
因为不懂 所以向前

TOP

引用:
原帖由 帝国墨子麟 于 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
代码诚如3#
利用对该函数的递归调用,以文字形式显示每一步的走法
复制内容到剪贴板
代码:
if(disk_n==1)
        cout<<"将disk1从"<<from_disk<<"移到"<<to_disk<<endl;/*假设from_disk=1,to_disk=3,这句就是在屏幕上显示将disk1从1移到3*/
     //只有一个盘时,直接从from_disk移到to_disk
这个问题现在属于经典问题啦
大邹
刚刚开始学C,还看不懂,等我看懂了再告诉你把

TOP

Processed in 0.105883 second(s), 5 queries, Gzip enabled