1.汉诺塔的背景:

法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔。不论白天黑夜,总有一个僧侣在按照下面的法则移动这些金片:一次只移动一片,不管在哪根针上,小片必须在大片上面。僧侣们预言,当所有的金片都从梵天穿好的那根针上移到另外一根针上时,世界就将在一声霹雳中消灭,而梵塔、庙宇和众生也都将同归于尽。

2.汉诺塔的规则:

设a, b, c是3个塔座:开始时,塔座a上有n个自上而下、由小到大地叠在一起圆盘,各圆盘从小到大编号为1, 2, …, n,现要求将塔座a上的这一叠圆盘移到塔座b上,并仍按同样顺序叠置,移动圆盘时遵守以下移动规则:

规则1:每次移动只能移动1个圆盘;

规则2:不允许将较大的圆盘放在较小的圆盘之上;

规则3:在满足移动规则1和2的前提下,可将圆盘移至a, b, c中任一塔座上。

3.汉诺塔的思路:

4.汉诺塔的代码实现:

#include <stdio.h>
void move(int x, int y)
{printf("%c->%c\n", x, y);
}
void hanoi(int n, char a, char b, char c)
{if (n == 1){move(a, c);}else{hanoi(n - 1, a, c, b);move(a, c);hanoi(n - 1, b, a, c);}
}
int main()
{int n = 0;char a = 'A';char b = 'B';char c = 'C';printf("请输入圆盘的个数");scanf("%d", &n);hanoi(n, a, b, c);return 0;
}

5.汉诺塔运行测试:

6.汉诺塔的时间复杂度:

汉诺塔问题的时间复杂度:O(2^n)

汉诺塔(hanio)相关推荐

  1. 个盘子的汉诺塔需要移动几步_图解汉诺塔问题( Java 递归实现)

    汉诺塔简介 最近在看数据结构和算法,遇到了一个非常有意思的问题--汉诺塔问题. 先看下百度百科是怎么定义汉诺塔的规则的: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候 ...

  2. 时隔七个月,我终于弄懂了汉诺塔的思想

    目录 1.问题描述 2.汉诺塔的分析 3.博主的反思 4.代码详解 博主在大一的上学期开学没多久看的汉诺塔,在看的过程中,很多地方似懂非懂,但是博主当时没有细品,便匆匆跳过,直到最近感觉自己递归学的不 ...

  3. 汉诺塔c语言源程序步骤,汉诺塔问题的算法分析及C语言演示程序的实现

    摘要:该文对经典的"汉诺塔"问题进行了详细的分析,并用C语言实现.通过问题的具体实现,使学习者了解问题的全过程,推广到一般. 关键词:汉诺塔;递归;C语言 中图分类号:TP301. ...

  4. 一脸懵逼的算法系列之汉诺塔

    背景 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小 ...

  5. 要理解递归,得先理解递归--用Java语言由浅入深讲解汉诺塔游戏

    2019独角兽企业重金招聘Python工程师标准>>> 一.递归是什么? 定义:程序调用自身的编程技巧称为递归.它分为调用阶段和回退阶段,递归的回退顺序是它调用顺序的逆序. 递归使用 ...

  6. python玩汉诺塔游戏攻略

    def hanio(n,x,y,z):'汉诺塔游戏攻略'if n == 1:print('%s-->%s'%(x,z))else:#将n-1个从x放到y上 借助zhanio(n-1,x,z,y) ...

  7. C语言递归问题【青蛙跳台阶】和【汉诺塔】

    青蛙跳台阶 题目要求:一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法? 分析: 当n为1时,有1种方法: 当n为2时,有2种方法: 当n为3时,有3种 ...

  8. C语言--实现汉诺塔【图文讲解,附代码】

    目录 (1)什么是汉诺塔 (2)汉诺塔打印步骤 (3)如何用C语言实现汉诺塔 (4)实现代码 (1)什么是汉诺塔   汉诺塔(Tower of Hanoi),又称河内塔.源自印度古老传说的一个游戏,大 ...

  9. 【汉诺塔】汉诺塔问题

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

最新文章

  1. ubuntu下7z文件的解压方法
  2. vue中引入jquery报错问题
  3. 如何用auto_ptr做为函数的参数进行传递
  4. windows下 conda常用使用指令
  5. 关键信息基础设施保护条例_韩永刚:内生安全助力关键信息基础设施保护
  6. numpy.exp()简单理解
  7. Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)...
  8. 贴一篇以前写的产品推广旧文
  9. JavaScript实现消消乐-源代码
  10. ubuntu装指定分区_安装Ubuntu时如何手动指定分区(高级分区)
  11. 使用urllib发起请求- urlopen发起请求read/decode/getcode/info/geturl-post请求抽屉网
  12. Metasploit Framework(3)Meterpreter
  13. XJTUSE专业课与实验指南(已经开源)
  14. 理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
  15. MySQL笔记(狂神说)
  16. 作业管理系统数据字典
  17. 微信的账号连接服务器失败怎么回事,微信无法连接到服务器的原因和6个解决方法...
  18. Online Patching
  19. 干货!学霸用12个决策模型告诉你,如何判断你到底需不需要区块链!
  20. 收楼了心情忐忑不安,该花钱请验房师来验房吗?找一个验房师需要多少钱,验房标准价格是多少,验房师现场验收出二百多个问题值不值

热门文章

  1. Android使用高德地图api实现基础定位
  2. 计算机科学与技术专业成功人士,我校2002级计算机科学与技术专业校友重返母校...
  3. 掌门优课用户量增多,用户看上了它什么?
  4. 曾经的习武少年,如今的锦佰安CEO:他立志要开启身份认证的无密时代
  5. 多级延迟效果器:D16 Group Tekturon for Mac()
  6. opencv实现camshift算法,以及代码详解
  7. php判断用户是微信浏览器还是其他浏览器,PHP区分企业微信浏览器|普通微信浏览器|其他浏览器...
  8. ubuntu 强制关闭程序或窗口方法
  9. 淘宝铸造亿级流量的首页?十年一剑
  10. 靠窗座位订票技能和退票省钱技能