Advertisement

(栈帧理解)汉诺塔游戏 Java版本

阅读量:
描述

有三根相邻放置的圆柱体编号为A、B、C,在A柱自下而上堆叠排列着n个不同尺寸的圆盘。目标是将所有这些圆盘逐一转移到目标柱体(即B或C)上去,并且在同一个柱体之间转移时必须确保较小直径的圆盘位于较大的直径之上。最少需要什么步骤才能完成这一操作呢?

在这里插入图片描述
分析

当仅有一个圆盘存在时(即n=1),问题变得简单:只需执行一次基本操作即可完成任务。
当有两个圆盘存在时(即n=2),解决方法如下:
第一步:将最上面的那个圆盘从起始杆移至临时杆;
第二步:将第二个较大的圆盘从起始杆移至目标杆;
第三步:将第一个较小的圆环从临时杆移回至目标杆。
当有三个或更多圆环存在时(即n≥3),解决方案可分解为以下几个关键步骤:
第一步:首先将前n-1个圆环从起始杆移至临时杆;
第二步:接着将第n个最大的圆环直移到达目标杆;
第三步:最后再将前n-1个圆环从临时杆转移回至目标杆。
需要注意的是,在完成上述操作之前,请确保在每一步骤中始终遵守以下原则:
a.任何时候都只能移动一个单独的圆环;
b.任何时候都不能在目标杆放置比其底座更大的圆环;
c.所有的操作都必须借

全部评论 (0)

还没有任何评论哟~