想要指点吗?
我在做这些题目的时候有个经验,就是先把这些数据结构写成函数的形式~或者你有心情就把他们写成类
这样你就可以比较容易实现软件的重用。你像你这样学数据结构,每写一个程序就要重新写一个线性表、栈等数据结构,这样是很费时间的事情。
淘宝杜琨
想要指点吗?
我在做这些题目的时候有个经验,就是先把这些数据结构写成函数的形式~或者你有心情就把他们写成类
这样你就可以比较容易实现软件的重用。你像你这样学数据结构,每写一个程序就要重新写一个线性表、栈等数据结构,这样是很费时间的事情。
顺便再告诉你,汉诺塔的栈算法可以用学习算法改进,让运算速度更加快,这是我突然想出来的,还不够完善。
汉诺塔还有个不用栈就能求的算法~~这是我高中的时候玩文曲星的时候发现的规律。
你能想到几种呢?
呵呵,我是一个大二的菜鸟了,还没有去研究那个塔啊,就我这个水平一种算法都实现不了也可能啊 哈哈
既然被问到了就不能不说呢~
1.这个问题其实很简单,就是利用void *指针万能的特性来实现指针转换
2.汉诺塔的算法~~
| | |
| | |
| | |
--- --- ---
1 2 3
假设有N个盘子需要移动,而且柱子之间是循环的,就是说
1号柱子上的盘子左移一格则会移到3号柱子上;
反之,3号柱子的盘子右移一格则会移动到1号柱子上;
那么
如果N为偶数:奇数号盘右移动一个柱子;偶数号盘左移动一个柱子;
如果N为奇数:奇数号盘左移一个柱子;偶数号盘右移动一个柱子
移动方式是
3根柱子中所能移动的最小号盘子 ->
3根柱子中所能移动的最大号盘子 ->
3根柱子中所能移动的最小号盘子 ->
3根柱子中所能移动的最大号盘子 ->
如此反复,直到目标柱子上的柱子数量为N为止
如果还不明白这个算法的意思还可以再问。
[此贴子已经被作者于2006-3-20 16:35:17编辑过]