第一部分:题目 题目描述 Description 汉诺塔问题(又称为河内塔问题),是一个大家熟知的问题。在A,B,C三根柱子上,有n个不同大小的圆盘(假设半径分别为1-n吧),一开始他们都叠在我A上(如图所示),你的目标是在最少的合法移动步数内将所有盘子从A塔移动到C塔。 游戏中的每一步规则如下: ...
分类:
Web程序 时间:
2016-03-31 23:16:52
阅读次数:
237
汉诺塔是怎样通过递归算法实现的? 这个问题困扰了我一段时间,今天回过头来想想似乎明白了,因此在这里记录下自己想法。 首先贴上在Python上的代码: 为了完成这个任务,需要将此母任务分解为三个子任务: 1.把A上面的n-1个盘,移动到B上 2.把A”最下面的第n个盘移动到C上 3.把第一步中的n-1 ...
分类:
编程语言 时间:
2016-03-31 00:09:30
阅读次数:
364
题目大意:基于汉诺塔原型,第一根柱子上有n个盘子,从上至下编号从1依次递增至n。在最佳移动方案中,第m次所移动的盘子的编号。 解题思路:模拟必然是会超时的。但根据汉诺塔的递归原理,容易发现,对于n阶汉诺塔,将第一个盘从A柱移动到B柱是一步,将前两个盘从A柱移动到B柱是3步,以此类推,将n个盘从A柱移 ...
分类:
其他好文 时间:
2016-03-26 12:11:14
阅读次数:
122
首先介绍下汉诺塔: 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个
分类:
编程语言 时间:
2016-03-22 19:16:48
阅读次数:
196
N阶汉诺塔:假设有3个分别命名为x,y,z的三个塔座,在x上有n个盘子,直径大小不同,有小到大按标号1,2,3...n排列,要借助y将n个盘子转移到z上,期间不能让小盘子压在大盘子上。规则: 当n=1时,直接把盘子由x——>z; 当n>1时,需利用y,首先将(n-1)个盘子由x——>y,把第n个实现
分类:
编程语言 时间:
2016-03-21 18:08:51
阅读次数:
183
目前做过的最纠结的一道递推题。 情况比较多,比较复杂。。。 这题最主要的还是要推出当m=2 时和m>2时,用什么方法最优。 给个数据 n=3,m=2 需要48 n=3,m=3 需要81 如果在纸上把这两种情况推出来,这题就容易找到递推。 m=1,就是最基础的汉诺塔递推了。 Time Limit: 2
分类:
其他好文 时间:
2016-03-19 12:37:19
阅读次数:
323
三个汉诺塔算法 f(n)=2^n-1 两个思路大同小异 Frame算法 在1941年,一位名叫J. S. Frame的人在《美国数学月刊》上提出了一种解决四柱汉诺塔问题的算法,这是人们熟知的Frame算法: (1)用4柱汉诺塔算法把A柱上部分的n- r个碟子通过C柱和D柱移到B柱上【F( n- r
分类:
其他好文 时间:
2016-03-16 22:44:10
阅读次数:
264
对于上面把问题抽象出来的那段描述,对于n > 1的时候,又可以抽象(换成“总结”这个词会没那么大压力吗?)出这3步:
(1)、将底盘n以上的环(n-1个)移动到B
(2)、将底盘n从A移动到C
(3)、将B上的环(n-1个)移动到C
其中第1步和第3步的步数是一样的,因为环的数量一样(n-1个),只是目标的柱子不同而已。public class TowerApp {
/**...
分类:
其他好文 时间:
2016-03-14 12:19:39
阅读次数:
153