汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

假设一共有n个圆盘。

有三根柱子a,b,c,此时他们的状态分别为起始柱,辅助柱,目标柱。

当n==1时很简单,只需要将a中的圆盘放到c中即可。

当n!=1时,如下所示


hanio(n个圆盘,起始柱,辅助柱,目标柱)
hanio(n,'a','b','c');

由于大圆盘不能放到小圆盘上面,所以最大的圆盘n必须留到最后,先放入c中,因此需要把n-1个圆盘放到b中,然后就可以将a柱中的第n个圆盘移动到c柱中了。但是要想要达到这个目标,需要先把a中的n-1个圆盘放入b中,因此这三根柱子的状态,a不变,仍然是起始柱,b此时变为了目标柱,而c则是辅助柱。

     hanio(n-1,a,c,b);cout<<a<<"-->"<<c;

达到上面的目标后,就可以把a中第n个圆盘移动到c中,那么接下来只需要把b中的n-1个圆盘放到c中即可。而此时柱子的状态就变成了b为起始柱,a为辅助柱,c为目标柱。而其实这个状态和第一步的是一样的,只是数量为n-1罢了。

hanio(n-1,b,a,c); 

完整代码:

#include<bits/stdc++.h>
using namespace std;
void hanio(int n,char a,char b,char c)
{if(n==1){cout<<a<<"-->"<<c;cout<<endl;return;}else{hanio(n-1,a,c,b);cout<<a<<"-->"<<c;cout<<endl;hanio(n-1,b,a,c); }}
int main(){int n;char a,b,c;cin>>n;hanio(n,'a','b','c');cout<<endl;return 0;
}

运行结果如下:

3
a-->c
a-->b
c-->b
a-->c
b-->a
b-->c
a-->c

【汉诺塔】汉诺塔问题相关推荐

  1. PTA汉诺(Hanoi)塔问题

    PTA汉诺(Hanoi)塔问题 古代某寺庙中有一个梵塔,塔内有3个座A.B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上.有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动 ...

  2. C#之汉诺塔(河内塔)递归问题

    C#之汉诺塔(河内塔)递归问题 前言 一.汉诺塔问题 二.问题思考 1.简单定义一下 2.假设简单的情况 3.推广 4.核心代码 总结 前言 小时候在直板手机上玩过这么一款叫做"汉诺塔&qu ...

  3. 小知识系列(3):Hanoi塔(汉诺塔,河内塔)

    同样,借此来强化学习,但是说实话我写这个感觉很玄.Hanoi塔是昨天刚学到的东西,想了很久,感觉还是没有悟透,可能学到更多新东西,或产生了新的想法,或突然悟到了什么,届时会再做修改. 看了很多关于Ha ...

  4. 汉诺塔(3塔、4塔思路详记)

    时隔多年,忽然又回来了. 记录一个小小的汉诺塔2333 没想到3年过去,我写递推还要看题解才能想明白/(ㄒoㄒ)/~~ #include<iostream> #include<cst ...

  5. 汉诺塔(河内塔)问题解析(函数递归经典问题)

    目录 1. 题目描述 2. 题目目标 3. 题目分析 1. 题目描述 在一块铜板装置上,有三根杆(编号A.B.C),在A杆自上而下.由大到下按顺序放置n个盘子. 2. 题目目标 把A杆上的盘子全部转移 ...

  6. 汉诺塔(河内塔)问题

    汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放 ...

  7. 汉诺塔+汉诺四塔(C/C++)

    目录 汉诺塔 1  简介 2  代码思路 2.1  对于次数的理解 2.2  对于移动的理解 3  代码 4  加深理解 汉诺四塔 1  思路 2  代码 汉诺塔 1  简介 汉诺塔(Tower of ...

  8. 汉诺(Hanoi)塔问题

    用C语言解决(Hanoi)汉诺塔问题 首先,我们先给出(Hanoi)汉诺塔问题: 相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏.该游戏是在一块铜板装置上,有三根杆(编号A.B.C),在A ...

  9. 汉诺塔(河内塔)算法与心得

    问题:给定一个由n个圆盘组成的塔,这些圆盘按照大小递减的方式套在三根桩柱中的一根上.我们的目的是要将整个塔移动到另一根桩柱上,每次只能移动一个圆盘,且较大的圆盘在移动过程中不能放置在较小的圆盘上面. ...

  10. 第10章 例题 7-4 汉诺(Hanoi)塔问题

    古代某寺庙中有一个梵塔,塔内有3个座A.B和C,座A上放着64个大小不等的盘,其中大盘在下,小盘在上.有一个和尚想把这64 个盘从座A搬到座B,但一次只能搬一个盘,搬动的盘只允许放在其他两个座上,且大 ...

最新文章

  1. java线程池的概念_Java线程池的基本概念以及生命周期
  2. stm32 堆和栈(stm32 Heap Stack)
  3. python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...
  4. MFC RadioButton用法详解
  5. vue请求数据传给子组件_vue.js基础,父组件如何向子组件传递数据「607」
  6. 指数随机变量 泊松过程跳_概率微课:第二章(19) 连续型随机变量函数的分布1...
  7. django开发个人博客系统
  8. QT蓝牙调试助手、动态曲线绘制
  9. TestStand系统框架简介
  10. 值得注意的4个NPS注意事项
  11. 计算机组成原理实验箱教程,计算机组成原理实验箱介绍.ppt
  12. 面试的时候,如何做自我介绍?
  13. 从“棱镜门”看回溯技术的应用
  14. 伸缩式起重机的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. android+获取电池信息,Delphi XE5 Android应用程序获取电池信息
  16. python编程课程是骗人的吧_在朋友圈买下编程课,你上的是Python还是成功学
  17. file_get_contents failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
  18. idea打开命令行窗口
  19. 【转】回字有四种写法,那你知道单例有五种写法吗
  20. 很久没来,丢一份前阵子做的 10 万连接性能测试 (fibjs, golang, nginx, nodejs)

热门文章

  1. springboot启动 lombok 找不到符号
  2. eos 测试网搭建,单节点,并使用命令行完成系统合约部署、账户创建、资产转账
  3. 云学堂丁云鹏:变成别人,还不如成为自己!
  4. 猪圆谷润铬羽丰,派满歌甜四海赢
  5. 【报告分享】2021天猫坚果消费趋势报告-CBNData(附下载)
  6. 求1-1/2+1/3-1/4+.......+1/99-1/100的值
  7. 小程序底部兼容iphoneX
  8. 明天终于要到公司开工了
  9. seaborn做图技巧
  10. 【NanoPi T2】 6.uboot gmac网卡驱动(2) - 寄存器介绍