汉诺塔(hanio)
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)相关推荐
- 个盘子的汉诺塔需要移动几步_图解汉诺塔问题( Java 递归实现)
汉诺塔简介 最近在看数据结构和算法,遇到了一个非常有意思的问题--汉诺塔问题. 先看下百度百科是怎么定义汉诺塔的规则的: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候 ...
- 时隔七个月,我终于弄懂了汉诺塔的思想
目录 1.问题描述 2.汉诺塔的分析 3.博主的反思 4.代码详解 博主在大一的上学期开学没多久看的汉诺塔,在看的过程中,很多地方似懂非懂,但是博主当时没有细品,便匆匆跳过,直到最近感觉自己递归学的不 ...
- 汉诺塔c语言源程序步骤,汉诺塔问题的算法分析及C语言演示程序的实现
摘要:该文对经典的"汉诺塔"问题进行了详细的分析,并用C语言实现.通过问题的具体实现,使学习者了解问题的全过程,推广到一般. 关键词:汉诺塔;递归;C语言 中图分类号:TP301. ...
- 一脸懵逼的算法系列之汉诺塔
背景 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小 ...
- 要理解递归,得先理解递归--用Java语言由浅入深讲解汉诺塔游戏
2019独角兽企业重金招聘Python工程师标准>>> 一.递归是什么? 定义:程序调用自身的编程技巧称为递归.它分为调用阶段和回退阶段,递归的回退顺序是它调用顺序的逆序. 递归使用 ...
- 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) ...
- C语言递归问题【青蛙跳台阶】和【汉诺塔】
青蛙跳台阶 题目要求:一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法? 分析: 当n为1时,有1种方法: 当n为2时,有2种方法: 当n为3时,有3种 ...
- C语言--实现汉诺塔【图文讲解,附代码】
目录 (1)什么是汉诺塔 (2)汉诺塔打印步骤 (3)如何用C语言实现汉诺塔 (4)实现代码 (1)什么是汉诺塔 汉诺塔(Tower of Hanoi),又称河内塔.源自印度古老传说的一个游戏,大 ...
- 【汉诺塔】汉诺塔问题
汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘 ...
最新文章
- ubuntu下7z文件的解压方法
- vue中引入jquery报错问题
- 如何用auto_ptr做为函数的参数进行传递
- windows下 conda常用使用指令
- 关键信息基础设施保护条例_韩永刚:内生安全助力关键信息基础设施保护
- numpy.exp()简单理解
- Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)...
- 贴一篇以前写的产品推广旧文
- JavaScript实现消消乐-源代码
- ubuntu装指定分区_安装Ubuntu时如何手动指定分区(高级分区)
- 使用urllib发起请求- urlopen发起请求read/decode/getcode/info/geturl-post请求抽屉网
- Metasploit Framework(3)Meterpreter
- XJTUSE专业课与实验指南(已经开源)
- 理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
- MySQL笔记(狂神说)
- 作业管理系统数据字典
- 微信的账号连接服务器失败怎么回事,微信无法连接到服务器的原因和6个解决方法...
- Online Patching
- 干货!学霸用12个决策模型告诉你,如何判断你到底需不需要区块链!
- 收楼了心情忐忑不安,该花钱请验房师来验房吗?找一个验房师需要多少钱,验房标准价格是多少,验房师现场验收出二百多个问题值不值
热门文章
- Android使用高德地图api实现基础定位
- 计算机科学与技术专业成功人士,我校2002级计算机科学与技术专业校友重返母校...
- 掌门优课用户量增多,用户看上了它什么?
- 曾经的习武少年,如今的锦佰安CEO:他立志要开启身份认证的无密时代
- 多级延迟效果器:D16 Group Tekturon for Mac()
- opencv实现camshift算法,以及代码详解
- php判断用户是微信浏览器还是其他浏览器,PHP区分企业微信浏览器|普通微信浏览器|其他浏览器...
- ubuntu 强制关闭程序或窗口方法
- 淘宝铸造亿级流量的首页?十年一剑
- 靠窗座位订票技能和退票省钱技能