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
    版权声明:本文为博主原创文章,转载请附上博文链接!
  • 相关阅读:
    sql server 表变量和临时表
    c# 操作excel 总结
    ifttt.com:让你的网络行为能引发连锁反应
    jQuery.tmpl.js
    [置顶]IFTTT与Google+是什么?ifttt怎么玩?
    使用 TRY/CATCH 语句解决 SQL Server 2005 死锁
    TFS2010 取消锁定
    Android 开发简介
    Cocos2d开发系列(七)
    针对中小型网站(3000人左右/15分钟)的服务器架构
  • 原文地址:https://www.cnblogs.com/lfxiao/p/10695896.html
Copyright © 2011-2022 走看看