1、我的递归算法(纯粹的递归) 2、书上的一个较慢的纯递归算法,运算15个盘子时,需要41.030s……. 4、网上一个优秀的非递归算法(用栈模仿递归),计算15个盘子时需要6.880s 我在这里根据《数学营养菜》(谈祥柏 著)提供的一种方法,编了一个程序来实现。 include using nam ...
分类:
编程语言 时间:
2017-11-27 00:06:03
阅读次数:
160
原创、转载请注明出处。 题意:经典的汉诺塔问题是有3根柱子,第一根柱子上有n个盘子,下面盘子比上面盘子大,要求把所有盘子移到第三根柱子上,过程中不能使得上面的盘子大于下面的盘子,且每次只能移动一个盘子,问最少需要多少步。 一开始想的是用普通递归,也就是状态空间搜索路径的方法,这样传的参数比较多。 在 ...
分类:
其他好文 时间:
2017-11-25 19:21:45
阅读次数:
150
下图是汉诺塔游戏的简单图示,我们要把x柱子上面的移动到z轴上面(汉诺塔游戏规则可以自行搜索,这里不做介绍) 需要引入tkinter和ScrolledText模块,下面直接贴代码(我用的是python3.6)。 然后运行之后结果如下图,比如输入汉诺塔的层数为3,然后点击确定按钮下面就会显示出详细的 步 ...
分类:
编程语言 时间:
2017-11-25 18:28:08
阅读次数:
144
1019: [SHOI2008]汉诺塔 Description 汉诺塔由三根柱子(分别用A B C表示)和n个大小互不相同的空心盘子组成。一开始n个盘子都摞在柱子A上,大的在下面,小的在上面,形成了一个塔状的锥形体。 对汉诺塔的一次合法的操作是指:从一根柱子的最上层拿一个盘子放到另一根柱子的最上层, ...
分类:
其他好文 时间:
2017-11-25 14:18:20
阅读次数:
136
教程视频参考:https://www.bilibili.com/video/av12642530/#page=20 问题: 代码如下: 由于一直在做一种重复性操作,所以可以使用递归的方法,分而治之,化成子问题,再递归。 ...
分类:
其他好文 时间:
2017-11-22 11:51:23
阅读次数:
204
http://www.lydsy.com/JudgeOnline/problem.php?id=1019 题目中问步骤数,没说最少 可以大胆猜测移动方案唯一 (真的是唯一但不会证) 设f[i][j] 表示 从i号柱子 上把j个盘子移到 g[i][j] 柱子上的步数 初始化:f[0][1]=1,g[0 ...
分类:
其他好文 时间:
2017-11-21 20:55:42
阅读次数:
100
汉诺塔问题源于印度的一个古老传说:梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。梵天命令婆罗门把圆盘按大小顺序重新摆放在另一根柱子上,并且规定小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。当所有的黄金圆盘都重新摆放在另一根柱子上时,世界就将在霹 ...
分类:
编程语言 时间:
2017-11-21 20:50:07
阅读次数:
248
执行过程和结果 Enter(3 disks,A B C) Enter(2 disks,A,C,B) Enter(1disk,A B C) Base case-->disk1 from A C //Disk 1 from A to C Return(1disk A B C) move disk 2 f ...
分类:
编程语言 时间:
2017-11-09 22:48:27
阅读次数:
308
1 #include <iostream> 2 #include<string.h> 3 using namespace std; 4 int f(int i,char a,char b,char c) //定义一个函数为i个圆盘从a经过b全部套到a上的函数 5 { 6 if (i == 1) // ...
分类:
其他好文 时间:
2017-11-09 22:46:04
阅读次数:
128