旋风

Communication comes from our hears and heads! my msn:youpeizun@hotmail.com


导航

汉诺(Hanoi)塔问题(C#版)

Posted on 2006-09-16 00:43  xuanfeng  阅读(3108)  评论(10编辑  收藏  举报

     一个只能用递归解决的数学问题;问题描述:古代有一个梵塔,塔内有3个座,ABC,开始时A座有64个盘,盘子大小不等,大的在上,小的在下。有一个老和尚想把这64个盘子从A座移到C座(如图所示),但每次只允许移动一个盘,且在移动过程中在3个座上始终保持大盘在下,小盘在上。在移动地程中可以行用B座,要求编程序打印出移动的步骤。

 

   逆向推理:1.假如一个和尚能把上面63个盘子先搬到B座,第二个和尚再把最大的那个移到C,第三个和尚再把63个盘子移到C座;至此整个工作就完成的。

   2.问题是怎么才能把63个盘子移到B座,按照同样的方法,先把62个盘子选移到C

,再把第63个盘子移到B座,最后再将62个盘子移到B座。

   3……如此类推;

   4.从上面分析可以看出:只有等后面那个和尚搬完盘子,前面的和尚才能够去完成任。让我们来栈的数据结构:数据的处理只在一端处理,且是先进后出。所以用递归的方法去处理是正确的。

 
       (汉诺塔图)

汉诺塔问题解决方案
   
 如果你发现有什么错误之处,请指出!谢谢了。