1.汉诺塔问题概述
问题简化描述为:n个盘子和3根柱子:A(源)、B(备用)、C(目的),盘子的大小不同且中间有一孔,可以将盘子“串”在柱子上,每个盘子只能放在比它大的盘子上面。起初,所有盘子在A柱上,问题是将盘子一个一个地从A柱子移动到C柱子。移动过程中,可以使用B柱,但盘子也只能放在比它大的盘子上面。
汉诺塔问题的以下几个限制条件:
1.在小圆盘上不能放大圆盘。
2.在三根柱子之间一回只能移动一个圆盘。
3.只能移动在最顶端的圆盘。
2.算法分析
先从比较小的数算起:
当n=1时;移动步骤为,从A>>>C;
当n=2时;移动步骤为,从A>>>B,A>>>C,B>>C;(我认为的核心点)
当N>=3时;可以这样理解;
把N个圆盘一分为二,其中第1到第N-1个为一个整体,剩下的第N个圆盘自己为一整体;现在移动方式就是当N=2的步骤;那么对移动步骤新的理解为;
第一步:A>>>B:把从1到N-1的圆盘从A柱移动到B柱;(具体先步骤忽略不计)
第二步:A>>>C:把最大的圆盘,也是第N个圆盘从A柱移动到C柱。
第三步:B>>>C:把从1到N-1的圆盘从B柱移到C柱:(具体步骤先忽略不计)
从以上分析可知,我们只需要求第一与第三步就可以了;同样的原理,递归思想;
以N=4(只画了第一步)为例:
g
3.代码实现
去网上搜一下吧;这里不在赘述。