原理,直接上图:
将m个盘子移到B上,分解为两步:
第一步:将第m个盘子移到B(图4),先将1->m-1个盘子移到C(图0-3)。
此时只剩m-1个盘子,第m个盘子就直接当成B柱(反正m盘大于其他盘子)。
进行第二步:将第m-1个盘子移到B,先将1->m-2个盘子移到A(图5)。
现在第m、m-1两个盘子都在B上,且1->m-2个盘子都在A上,反复递归即可。
代码:
#include<bits/stdc++.h>
using namespace std;
//汉诺塔
//m-->几个盘子
//第一位变量from定义为起始柱,第二位变量to定义为目的柱,第三位变量help定义为辅助柱
//起始柱、目的柱、辅助柱三个位置顺序的含义:把盘子从起始柱移动到目的柱,通过辅助柱的帮助
//from、to、help被赋值A、B、C后,含义不变,如:
//HanoiTower(A,B,C);含义:盘子从A移到B,