zoukankan      html  css  js  c++  java
  • 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
    版权声明:本文为博主原创文章,转载请附上博文链接!
  • 相关阅读:
    第二阶段站立会议第十天
    第二阶段站立会议第九天
    第二阶段站立会议第八天
    第二阶段站立会议第七天
    第二阶段站立会议第六天
    第二阶段站立会议第五天
    第二阶段站立会议第四天
    第二冲刺阶段个人进度10
    第二冲刺阶段个人进度09
    第二冲刺阶段个人进度08
  • 原文地址:https://www.cnblogs.com/lfxiao/p/10695896.html
Copyright © 2011-2022 走看看