• Hanoi问题 算法


    问题描述:假设有3个分别命名为A、B、C的塔座,在塔座A上插有n个直径大小各不同,一小到大标号为1,2,….,n的圆盘,要求将塔座A上的n个圆盘移动到C盘上,并且仍按原来的顺序叠排。
    同时遵循下列规则:
    每次只能移动一个圆盘
    圆盘可以插在A、B、C中的任一塔座上
    任何时刻都不能将一个较大的圆盘压在较小的圆盘之上
     
     
     
    算法如下:

    void
    Hanoi(int n,char A,char B,char C){ //将塔座A上的n个圆盘按规则搬到C上,B做辅助塔 if(n==1) move(A,1,C); //将编号为1的圆盘从A移动到C else{ Hanoi(n-1,A,C,B); //将编号为1至n-1的圆盘移动到B,C做辅助塔 move(A,n,C); //将编号为n的圆盘从A移动到C Hanoi(n-1,B,A,C); //将B上编号为1至n-1的圆盘移动到C,A做辅助塔 } }
    个人理解:当有3个圆盘时,怎么移动大家应该都很清楚,那么当有多个圆盘时,把最底层的两个圆盘除外,上面的所有圆盘当作整体,然后在研究这个“整体”,如果数量还很多,可以继续使用整体思想。
    而上述算法,则是一直递归到n=1为止,然后在把递归,一层层“翻”出来!
    递归算法优缺点:
    优点:程序结构清晰,形式简洁但递归程序在执行时需要系统提供隐式的工作栈来保存调用过程中的参数、局部变量和返回地址
    缺点:占用内存空间多,运行效率较低
    与此类似的还有八皇后问题,迷宫问题等。。
    ---------------------
    作者:EasyChill
    来源:CSDN
    原文:https://blog.csdn.net/Song_JiangTao/article/details/79717012
    版权声明:本文为博主原创文章,转载请附上博文链接!
  • 相关阅读:
    【Unity 3D】学习笔记29:游戏的例子——简单的小制作地图
    mysql位_01检查错误代码的方法
    编程获取linuxservercpu、内存和磁盘使用
    poj 2482 Stars in Your Window(扫描线)
    Largest Rectangle in Histogram
    【剑指offer】删除字符也出现在一个字符串
    linux sdio card睡眠治疗 sdio card removed解决方案
    Wooyun
    APT攻击
    Elasticsearch 学习~
  • 原文地址:https://www.cnblogs.com/lfxiao/p/10695896.html
Copyright © 2020-2023  润新知