汉诺塔问题算法分析及C语言实现

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:houtou27
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:文章对“汉诺塔”问题进行了详细的分析,给出了一种实现的算法,并用C语言实现。通过该问题的C实现,可使学习者清晰地观测到解决该问题的全过程。
  关键词:汉诺塔;算法;递归
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)17-21496-02
  
  1 问题描述
  
  问题提出:有三个塔(分别为A号,B号和C号)。开始时,有n个圆形盘以从下到上、从大到小的次序叠置在A塔上。现要将A塔上的所有圆形盘,借助B搭,全部移动到C搭上,且仍按照原来的次序叠置。
  移动的规则:这些圆形盘只能在3个塔间进行移动,一次只能移动一个盘子,且任何时候都不允许将较大的盘子压在比它小的盘子的上面。
  要求:从键盘输入初始圆形盘子个数n,用C语言实现n个盘子最佳移动的全过程。
  
  2 算法分析
  
  题目实现的是设计一个盘子移动的方案,使得A号塔上的所有盘子借助于B号塔按照原来的次序移动到C号塔上,并且给出完整的最佳的盘子移动的方案。
  从实际的、具体的盘子的移动过程来分析,找出问题内在的规律。经分析无论盘子的个数有多少,是1、2、3或n个,也不管怎么去移动盘子(当然是按一定规则移动),但在移动的过程中,将始终会出现这样的状态情况:(n-1)个盘子将会以从下到上、从大到下的次序叠置在B塔上,这时,A塔上第n个盘子就能被轻而易举叠放到C塔上;接着,我们再把B塔上的共(n-1)个盘子移动到C塔上,问题好像已经解决。
  但,B塔上(n-1)个盘子怎么移动到C塔上呢? 这是要解决的第二个问题。同样,不管怎么移动,也将会出现这样的状态情况:(n-2)个盘子将会以从上到下、从大到小的次序叠置在A塔上,这时,B塔上第(n-1)个盘子就能被轻而易举放到C 塔上;接着,把A塔上的共(n-2)个盘子移动到C塔上。
  这样,不断深入,不断细小化,最终,将到达仅有一个盘的情形,这时,递归也就终止了,问题也得到了解决。通过以上分析,这里有很明显递归关系。
  由此,想到了采用递归算法来解决该问题,因为递归算法有这样特征描述:为了求解出规模为n的问题的解,我们先设法将它分解成一些规模较小的问题,然后从这些较小问题的解能方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的方法分解,分解成规模更小的问题,并能从这些更小的问题的结构造出规模稍大问题的解。特别地是,当规模n=1时,能直接得到解。
  现在,严格按照递归算法来解决问题。先定义递归方法Hanio(int n,char A,char B,char C),按如下步骤进行解题(设初始盘子个数为N):若A塔上仅仅只有一个盘子(n=1),则直接从A移动到C,问题完全解决。若A塔上有一个以上的盘子(n>1),则需要考虑以下三个步骤。
  第一步:把(n-1)个盘子从A塔经过移动,叠放到B塔上。在不违反规则情况下,所有(n-1)个盘子不能作为一个整体一起移动,而是要符合要求地从一个塔移到另一个塔上。用Hanio(n-1,A,C,B)调用递归方法,注意:这里是借助于C塔,将(n-1)个盘子从A塔移动到B塔,A是源塔,B是目标塔。
  第二步:将剩下的第n个盘子(也就是最底下的一个)直接从A塔叠放到空着的C塔上。
  第三步:用第一步的方法,再次将B塔上的所有盘子叠放到C塔上。同样,这一步实际上也是由一系列更小的符合规则的移动盘子的操作组成的。用Hanio(n-1,B,A,C)调用递归方法,注意: 这里是借助于A塔,将(n-1)个盘子从B塔移动到C塔,B是源塔,C是目标塔。
  这个算法达到了预期的目标,即在C 塔上按正确的次序叠放了所有的圆形盘子。有了前面问题算法分析的基础,继而,可以用C语言来实现算法。
  
  3 C语言实现
  
  3.1 说明
  (1) n为A塔初始盘子个数;
  (2) A塔上盘子从上到下、从小到大编号依次为1,2,3 …;
  (3) Hanio()方法采用递归算法,实现盘子移动的最佳方案。
  3.2 编程
  #include
  viod Hanio(unsigned n,char A,char C,char B);
  int i=0;
  void main()
  {
   unsigned n;
   printf("please enter the number of disc:");
   scanf("%d",
其他文献
摘要:ArcIMS是ESRI公司的产品之一,它是顺应地理数据在互联网上传输、共享的要求而产生的,定位于Internet网上地图发布层面。它能满足无论是本地还是全球的多用户的网上信息与数据共享的要求,方便多用户同时在线查询和浏览地理信息数据。ArcIMS安装平台很多。目前在Windows环境下以Microsoft的IIS(Internet Information Server)作为Web服务器的居多
摘要:根据本人参加企业PIIS系统的经验,详细介绍了电力施工企业项目管理信息集成系统(Project Information Integration System简称PIIS)的建设过程及系统功能特点,并分析了系统为企业管理所带来的积极改变和良好的经济效益,以及系统的成功建设与实施对提高企业管理水平、实现总部统一管理、提升集中调控能力起到的巨大推动作用。  关键词:施工企业;信息化建设;信息系统 
摘要:针对SNMP(简单网络管理协议)的安全威胁,文中对SNMP协议在安全性方面存在的问题进行了论述,以某知名厂商为例,探讨了利用SNMP协议对其网络设备的攻击,并据此提出了一些防范的建议与措施。  关键词:SNMP;MIB;攻击  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)09-11611-03    The Security Analysis of SNMP
摘要:单片机应用技术学习涉及到的实验实践环节比较多,而且硬件投入比较大。随着计算机技术的进步,基于EDA技术的Proteus能很好解决这个问题。本文通过介绍51单片机最小化应用系统设计实例,详细说明了Proteus在单片机系统开发中的应用。  关键词:单片机;51单片机最小应用系统;Proteus仿真  中图分类号:TP391文献标识码:A文章编号:1009-3044(2008)18-21ppp-
摘要:本文指出了当前市面上家用电脑电源关于EMC方面不足的情况,并依据国家标准研制出一种新型的可以解决家用电脑电源EMI问题的无源滤波器。  关键词:电脑;电源干扰;无源滤波器  中图分类号:TN912 文献标识码:A文章编号:1009-3044(2008)06-1pppp-0c    1 电脑电源干扰分析    在我们的日常生活用电中,其实额定频率为50HZ的市电并不是“纯净”。由于电网中存在着
摘要:俄罗斯方块游戏很有趣味性,游戏吸引人的地方在于几个不规则的图形变化。那不规则图形能否完全覆盖全部空间呢,在理论上能得到结论吗?文中试着对L形方块入手,从理论上给出它能充满游戏空间的条件。  关键词:俄罗斯方块;L形方块;完全覆盖  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)12-20ppp-0c    The Condition of Russia-Bloc
摘要:基于ASP.NET 2.0和SQL SEVER 2000技术,采用Microsoft Visual Studio 2005编程环境开发了一套毕业设计管理信息系统。该系统运行安全可靠,功能较全,有效地提高了高校毕业设计管理工作的效率,为高校毕业设计实践教学管理提供了新的模式。   关键词:管理信息系统;ASP.NET 2.0;SQL Server 2000;数据库  中图分类号:TP311文献
摘要:本文对AutoCAD的二次开发技术进行了探讨,就AutoCAD六种开发技术AutoLISP,VisualLISP,ADS,VBA,Object ARX,Dot NET的内涵作了简要介绍,对其优缺点进行了详细的分析对比,指出ObjectARX和Dot NET是未来AutoCAD二次开发的方向,并为广大的AutoCAD二次开发人员选用其开发工具提供参考性意见。   关键词:AutoCAD;Aut
摘要:Jar文件是Java 的可执行文件,在安装有JRE的机器上可以直接执行。然而实际操作时常常会遇到显示“could not find the main class. program will exit”无法执行的故障,有时虽能执行但无图片显示,或音乐失声,或干脆无反应。本文将针对这些执行故障进行分析,并提出排除和解决的方法。  关键词:Java;Jar文件;故障排解  中图分类号:TP311文
摘要:介绍了一种基于东南大学ASIC工程中心自主研发的SEP3203微处理器的气象数据采集系统,该系统对大气中的温度、湿度和气压等物理量进行了测量和相关处理,并借助于中国移动的GPRS网络,将处理后的数据送到气象监测服务中心。系统具有结构简单、性能稳定和功耗低等优点。  关键词:气象监测;温湿度;气压;GPRS   中图分类号:TP316文献标识码:A文章编号:1009-3044(2008)24-