汉诺塔一文速通
汉诺塔一文速通
问题背景
- 有三根柱子,通常标记为 A(起始杆)、B(中转杆)、C(目标杆)。
- 开始时,所有的圆盘都按照从大到小的顺序堆叠在一根柱子(假设为 A 柱)上。
- 目标是将所有圆盘从起始柱子(A 柱)移动到目标柱子(比如 C 柱)。
- 移动过程中有两个重要的规则:每次只能移动一个圆盘;在移动过程中,大圆盘不能放在小圆盘上面。
本质分析
实际上,以三个汉诺塔为例,我们需要把最上面两个盘借助C转移到B上,(此时C是中转杆,B是目标杆),再直接将最大的底盘移动到C(目标杆),最后借助A,将B上的n-1个盘转移到C上(此时B是起始杆,A为中转杆,C为目标杆)。
当汉诺塔的盘数增加,其底层逻辑都不变,依旧是:
- 将除底盘外的n-1个底盘移动借助目标杆到中转杆上
- 直接将最大底盘移动到目标杆上
- 将中转杆上的n-1个盘借助起始杆移动到目标杆上。
代码实现
1 |
|