题目大意:标准的汉诺塔上有n个盘子,然后给定两个状态,初状态和目标状态,即每个盘子的位置。求出初装态到目标状态需要最少的步数
解题思路:汉诺塔问题我们知道,1,2,3,4。。。个盘子移动到另一个柱子需要的步数为:1,3,7,15,,,,即前一项的两倍再加一。在考虑另一个问题,当最大的盘子在目标位置时就不需要移动,那么就找第二小的盘子,找到一个盘子时,那这个盘子就是需要移动的最大的盘子,但这个盘子在1号柱子,目标时2号柱子时,剩下的盘子只能在3号柱子上,那么这个状态必须有,而且汉诺塔游戏中,从初始状态到一个状态,也可以从这个状态到初始状态,而且步数相同。那我们就可以把3号柱子此时的状态作为中间状态,他恢复到初始状态的步数+他到目标状态步数+1(需要移动的最大的盘子,从1号柱子移动到2号柱子)就是要求的答案。这就转化成了都在一个柱子上,然后把相应的盘子移动到相应的柱子上的问题,按照之前的办法,找到最大的需要移动的盘子,把上面所有的盘子移动到另一个柱子上再加一即可,而我们移动n个盘子需要的步数查表就可得出。
AC代码:
#include <iostream>
#include <cstdio>
using nam