关于汉诺塔问题,好多时候当时理解了过段时间可能又会忘,其实这个代码很简单,主要还是分治思想理解不够透彻。

架设3根柱子分别为A、B、C,圆盘数目为n。

1:如果A有一个圆盘,则直接移动至c。

2:如果A有2个圆盘,则A->B,A->C,B->C。

好了这个时候已经可以解决问题了,结束条件为 n==1;

假设当我们在数目为n-1的时候已经解决了移动问题可以成功移动至C,如果又多了一个呢,即n,我们用同样的方法把圆盘移动至B(我们已经可以把n-1个盘子通过B移动至C了,那么通过C移动至B也一样),为什么移动至B了呢,因为多了个盘子(放在最底部的大盘子),我们要向步骤2一样把上面的n-1个盘子看成一个整体,用上一个方法即移动n-1个盘子的方法把上面的n-1个盘子移动至B,然后把新增的那个大盘子移动至C,然后再用移动n-1个盘子对应的方法把B中的n-1个盘子移动至C,就完成了。

下面贴代码:

void hanoi( char A, char B, char C, int n)   //这样设置参数是为了说明要通过B这个辅助柱子把A中的盘子移动至C.很关键,ABC换下位置含义就变了
{if(1 == n){cout << A << "->" << C << endl;  //如果只有一个盘子不需要任何方法,直接移动}else{hanoi(A, C, B, n - 1);   //如果不止一个盘子则调用移动n-1个盘子的方法,把上面的n-1个盘子由A,借助C移动至B,A就只剩一个最大的了.cout << A << "->" << C << endl;  //把A里剩下的最大那个盘子直接移动至Chanoi(B, A, C, n - 1);  //这时候C里有个最大的,B有n-1个排好的盘子,同样用移动n-1个盘子的方法来把这n-1个盘子移动至C,结束}
}

汉诺塔问题的解决思路及算法相关推荐

  1. 【数据结构与算法】之深入解析“汉诺塔问题”的求解思路与算法示例

    一.题目描述 有 A,B,C 三根柱子,A 上面有 n 个盘子,想把 A 上面的盘子移动到 C 上,但是要满足以下三个条件: 每次只能移动一个盘子: 盘子只能从柱子顶端滑出移到下一根柱子: 盘子只能叠 ...

  2. 汉诺塔V - ACM解决方法

    Problem Description 用1,2,...,n表示n个盘子,称为1号盘,2号盘,....号数大盘子就大.经典的汉诺塔问题经常作为一个递归的经典例题存在.可能有人并不知道汉诺塔问题的典故. ...

  3. 汉诺塔问题的解决思想

    汉诺塔问题是法国数学家编写的一个古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这 ...

  4. 经典汉诺塔问题的推理思路以及求解

    汉诺塔是递归中的一道经典题目,接着我们看如何求解以及求解的思路. 首先了解汉诺塔 汉诺塔是给定三根柱子,通过一次移动一片圆盘将一根柱上所有圆盘移到另外一根柱上 而当圆盘数>=2时我们就要借助另外 ...

  5. 汉诺塔递归的空间复杂度_学习算法绕不开的~~汉诺塔

    大家好,我是老郝.本文就汉诺塔问题向大家阐述递归的思想. [问题描述] 有三根柱子,最左边的柱子上从大到小放着很多的圆盘,要求把圆盘一个一个的放到最右边的柱子上并且只能小盘子压在大盘子上.(据说古代阿 ...

  6. Python入门之经典函数实例——第1关:递归函数 - 汉诺塔的魅力

    任务描述 在Python函数内部,我们可以去调用其他函数.所以如果一个函数在内部调用自身,这个函数我们就称为递归函数.本关我们将以汉诺塔的例子来感受递归函数的方法与应用. 汉诺塔问题源于印度一个古老传 ...

  7. 汉诺塔(Tower of Hanoi)--------递归思路

    汉诺塔问题简介: 有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移到柱子C上,并且每次移动,同一根柱子上都只能是大盘子在下,小盘子在上,请 ...

  8. 汉诺塔完整代码及分析

    问题描述: 汉诺塔游戏,现在有ABC三根柱.要求:将A柱所有的圆盘放到C柱.在移动的过程中可以借助B柱.并且规定大圆盘不能放小圆盘上,每次只能移动一个盘子.用递归的方式来解决汉诺塔问题. 解题思路: ...

  9. 汉诺塔问题(分治+源码+动画演示)

    汉诺塔问题(分治+源码+动画演示) 汉诺塔问题源自印度一个古老的传说,印度教的"创造之神"梵天创造世界时做了 3 根金刚石柱,其中的一根柱子上按照从小到大的顺序摞着 64 个黄金圆 ...

最新文章

  1. 使用xdebug分析thinkphp框架函数调用图
  2. Linux基础知识——常用shell命令介绍(三)
  3. Nat Rev Genet发表房刚组细菌表观组综述论文
  4. PMP考试资料:这个项目值得去做吗
  5. ​数据分析最重要的 3 种特征编码,你真的能分清楚?
  6. python中count的作用_python中函数COUNT()的功能是什么
  7. 自动驾驶计算本车离期望轨迹距离的方法
  8. 看故事学Redis:再不懂,我怀疑你是假个开发
  9. 剑三 服务器维护,11月15日服务器例行维护公告 补偿部分服务器
  10. APU工业控制领域应用
  11. Three.js - 渲染器(WebGLRenderer)(二)
  12. 如何显示隐藏的 Chrome 扩展程序图标
  13. ucr计算机专业学生吧,在UCR商学院的成长记忆
  14. idc机房建设费用_数据中心机房收费标准
  15. GTD软件比较和选用
  16. JVM参数-XX:+HeapDumpOnOutOfMemoryError使用方法
  17. GrayLog 设置日志保留时间每天1个索引,保留183天(6个月)
  18. LeetCode 1104. Path In Zigzag Labelled Binary Tree解题报告
  19. 非J2EE部署解决方案
  20. 机械臂机器人——(4)Robotics Toolbox机器人仿真

热门文章

  1. wap相关术语和缩略语
  2. 数字电路基础(二)逻辑代数
  3. 【JY】结构工程师:请避开有限元分析中6个常见的“坑”
  4. Ipad全线涨价;马斯克计划未来数月裁掉推特 75% 员工;支付宝已支持给微信QQ好友转账 | EA周报...
  5. metaboanalyst-statistic解析-满满干货!
  6. 如何用java计算圆的周长和面积?
  7. 如何达到高效的网络信息传播
  8. 从零开始学Python练习题(一)
  9. MySQL Workbench使用手册大全
  10. 海思编译kernel