Question:
汉诺塔问题,经典问题不赘述,加一个简单的限制:不能从最左侧的塔直接移动到最右侧的塔,也不能从最右侧的塔直接移动到最左侧的塔,必须经过中间,求当塔有N层的时候,打印最优移动过程和最优移动步数。
think:
递归的思路:
每个棋子移动的情况,概括起来共有以下几种情况:
1:从 left 移动到 mid
2:从 mid 移动到 left
3:从 mid 移动到 right
4:从 right 移动到 mid
5:从 left 移动到 right ( 具体为两步:step1:从 left 移动到 mid,step2:从 mid 移动到 right)
6:从 right 移动到 left (具体为两步:step1:从right 移动到 mid,step2:从 mid 移动到 left)
每次移动,都从最上层的塔开始移动,涉及递归,思考从少到多进行推演。
当塔只有两层时,移动过程如下(例:从左至右移动,塔从上到下依次为①,②....N):
1:①从 左 移动到 中
2:①从 中 移动到 右
3:②从 左 移动到 中
4:①从 右 移动到 中
5:①从 中 移动到 左
6:②从 中 移动到 右
7:①从 左 移动到 中
8:①从 中 移动到 右
完成。
现在从小及多,推到有N层的情况:
如果剩余N层,从最上到最下层依次为1-N,移动过程如下:
1)将1~N-1 层塔先从左移动到右(递归)
2)将第N层从左移动到中
3)将1~N-1 层从右移动到左(递归)
4)将第N层从中移动到右
5)将1~N-1 层塔从左移动到右(递归)
solution:
public int hanoiPorble

本文探讨了带有特殊限制的汉诺塔问题:禁止直接从左侧塔移动到右侧塔,反之亦然。通过递归思路分析,详细阐述了从两层塔到N层塔的移动过程,并提出了解决方案。

1万+

被折叠的 条评论
为什么被折叠?



