汉诺塔问题的c语言实现
基于C语言的 汉诺塔问题的实现。
目录
- 基于C语言的 汉诺塔问题的实现。
- 汉诺塔问题简介
- 问题解决方案
- 代码的实现 (C)
汉诺塔问题简介
相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上
问题解决方案
最常见的就是使用递归的方法求解汉诺塔问题
我的理解是 将汉诺塔问题移动步骤简化
首先我们考虑二层汉诺塔问题的解决方法:
上图是二层汉诺塔问题的初始状态(图画的有点丑意思应该能表达出来
)
这是第一步 将1号块移到b上去
第二步 将2号块转移到c上
最后将第一块移到目的地c上去
所以上述可以简单的表示为
1号从a——>b
2号从a——>c
1号从b——>c
我们可以对这个过程做一个简单的推广:
当层数为三层的汉诺塔问题的时候 我们可以将第一块和第二块打包 类似下图:
这样我们就回归到求二层汉诺塔的模型中
当我们将其推广到n层汉诺塔的时候 我们已经不难看出这是一个递推的问题了
于是求解n层汉诺塔的问题就能大概看成这样“三个”步骤:
1:将前n-1层移到b
2:将第n层移到c(目的地)
3:将(已经位于b的)n-1层 移动到c
代码的实现 (C)
//大致是这样的 分为三步 类似于打包分割的思想
//1、将n-1个移到b
//2、将第n个移到c
//3、将n-1个移到cvoid Hanoi(int n,char a,char b,char c)
{if (n == 1){printf("将第%d块从%c——>%c\n", n, a, c);}else{Hanoi(n - 1, a, c, b); //步骤一printf("将第%d块从%c——>%c\n", n, a, c); //步骤二Hanoi(n-1,b,a,c); //步骤三}
}int main()
{int n=3;printf("请输入汉诺塔层数:");scanf("%d",&n);printf("\n汉诺塔移动步骤:\n");Hanoi(n,'a','b','c');return 0;
}
(本人新手刚刚上路 有不足之处请各位大佬多多指教。)
汉诺塔问题的c语言实现相关推荐
- 汉诺塔递归的c语言实现(递归)
对于递归来讲, 汉诺塔实际是经典到不能再经典的例子了, 每个数据结构的教材对会提到. 但是到最后只给出一段类似下面的一段代码: #include<stdio.h>void move(i ...
- c语言汉诺塔移动次数,C语言计算汉诺塔最小挪动步数 (二)
C语言计算汉诺塔最小移动步数 (二) 前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较 ...
- 汉诺塔小游戏 c语言
相信大家在学习C语言嵌套的时候已经学习过经典问题汉诺塔了,我学习时就想能不能搞个汉诺塔的游戏出来,结果睡了一觉就给忘了.今天突然想起,搞出来与大家分享,水平一般,但符合汉诺塔规则.最终代码我放在文章最 ...
- c语言汉诺塔实验报告,C语言汉诺塔的简单了解
汉诺塔详解 以4层为例 以下为我的拙见,还希望大佬雅正 要把汉诺塔移动到c 需要把1,2,3层移到b 把4移动到c 在吧123移动到b 但是一次只能动一块 所以我们目前要做的就是把上面三块移动到b 那 ...
- linux开发汉诺塔游戏程序,C语言实现汉诺塔游戏
操作就是:A B 号码A的塔顶一层放在号码B的塔顶.如1(空格) 3 回车. 话说有人能把我这C的代码添加到QT界面框架上去么? 代码写的不好 ,维护性不够,只能玩8层的,写完以后发现很难拓展,软件 ...
- c语言函数汉诺塔不用move,C语言——汉诺塔问题(函数递归)
问题概述:古代有一个梵塔,塔内有3个座A,B,C.开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上,有一个老和尚想把64个盘子从A座移动到C座,但是规定每次只允许移动一个盘,且在移动过程中在 ...
- 汉诺塔问题(C语言代码)
汉诺塔:汉诺塔(Tower of Hanoi)源于印度传说中,大梵天创造世界时造了三根金钢石柱子,其中一根柱子自底向上叠着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子 ...
- c语言汉诺塔动画程序,C语言实现的动画汉诺塔
/*本程序实现C上的汉诺塔动画移动效果,如有建议可和我联系,QQ:928853003*/ /*编写者:杰 */ /*完成时间:2012年9月25日9:02*/ /*有部分函数可参见easyx帮助,运行 ...
- c语言递归汉诺塔次数,汉诺塔问题(C语言经典递归问题(一))
把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好. 操作规则: 每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A.B.C任一杆上. 思路: 图解: ...
- 汉诺塔问题(C语言,递归)
问题: 寺院里有3根柱子,第一根有64个盘子,从上往下盘子越来越大.方丈要求小和尚把这64个盘子全部移动到第3跟柱子上.在移动的时候,始终只能小盘子压着大盘子,而且每次只能移动一个. Hanoi To ...
最新文章
- AI发展进入2.0时代!英特尔在落地中总结4大经验、分享7个案例
- php 循环curl,php中使用foreach curl多个URL及多线程请求多个URL
- xe7 Unresolved external CSPIN.OBJ
- 安装navicat之后双击就会闪退_Adobe 2020版本,安装教程来咯
- 手机MODEM 开发(26)---LTE切换和重选参数中文详解
- SpringMVC学习(八)Ajax异步请求
- 系统开机 linux 时间不对,linux下查看系统运行时间和最近一次的开机启动时间
- java json jar包下载_jsonobject必备jar包
- 传真服务器的定义与选购
- linux vi脚本,用VIM编写脚本
- 【转】MPLAB使用PICKit3.5烧录程序说明
- 4.龙芯2k1000 系统制作及安装
- iOS 录制视频MOV格式转MP4
- 传智播客 HTTP协议详解
- UltraEdit-32 v14.10 简体中文版
- 全国计算机等级考试16套一级,全国计算机等级考试16套.docx
- LaTex 编译中文
- 向字典中相应的键增加值
- 泰凌微ble mesh蓝牙模组天猫精灵学习之旅 ② 如何实现 微信小程序蓝牙控制 Ble Mesh模组 安信可TB02,全部开源!
- iOS短视频源码音频采集过程中的音效实现