设有n个大小不等的中空圆盘,按从小到大的顺序从1到n编号。将这n个圆盘任意的迭套在三根立柱上,立柱的编号分别为A、B、C,这个状态称为初始状态。
现在要求找到一种步数最少的移动方案,使得从初始状态转变为目标状态。
移动时有如下要求:
一次只能移一个盘;
不允许把大盘移到小盘上面。
汉诺塔问题是递归的一个很好的模型
思考并结合题意,本问题有如下性质
- 大的过了,小的才能过
- 6代表3根初始柱,3根中转柱,first[x]代表初始位置,6-(first[x]+y)便是中转柱,这个操作便是将小盘子都移开
1 | #include<cstdio> |