【算法题】用栈来解决汉诺塔问题
用栈来解决汉诺塔问题 题目 修改汉诺塔问题的游戏规则:限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔有N层的时候,打印最优移动和最优移动总步数。 要求: 方法一:递归的方法 方法二:非递归的方法,用栈来模拟汉诺塔的三个塔 思路 方法一:递归的方法 首先,如果只剩最上层的塔需要移动,则有如下处理: 如果希望从左移动到右,打印Move 1 from left to right 如果希望从中移动到左,打印Move 1 from mid to left 如果希望从中移动到右,打印Move 1 from mid to right 如果希望从右移动到中,打印Move 1 from right to mid 如果希望从左移动到右,打印Move 1 from left to mid Move 1 from mid to right 如果希望从右移动到左,打印Move 1 from right to mid Move 1 from mid to left 以上就是递归的终止条件,也就是只剩上层塔时的打印过程。 多层塔的时候。 如果剩下N层塔,从最上到最小依次为1~N-1,则有如下判断 如果剩下的N层塔都在左,希望全部移到中,则有三个步骤 1)将1~N-1层塔先全部从左移动到右,交给递归过程 2)将第N层塔从左移到中 3)将1~N-1层塔全部从右移到中