#72. 汉诺塔问题2
汉诺塔问题2
题目描述
给定一个 汉诺塔 的任意合法状态,共有三根柱子(编号 1、2、3)和 个圆盘。
每个圆盘编号从 到 ,编号越大表示盘子越大。
给出当前每个盘子所在的柱子编号,你需要输出一系列合法的移动操作,使得最终所有盘子都移动到 第 3 根柱子 上。
一次合法的移动是:
- 将某一根柱子顶部的盘子拿起,放到另一根柱子的顶部;
- 且不能把大盘子放在小盘子上。
输入保证当前状态是合法的(即每根柱子从下到上盘子编号严格递减)。
输出步数最少的方案。
输入格式
- 第一行:一个整数 ,表示第一个柱子上盘子的数量。 接下来 个整数 ,表示第一个柱子上的盘子编号。
- 第二行:一个整数 ,表示第二个柱子上盘子的数量。 接下来 个整数 ,表示第二个柱子上的盘子编号。
- 第三行:一个整数 ,表示第三个柱子上盘子的数量。 接下来 个整数 ,表示第三个柱子上的盘子编号。
输入保证该状态是合法的。
输出格式
每行输出两个整数 a b(),表示将柱子 a 顶部的盘子移动到柱子 b 顶部。
执行完所有操作后,所有盘子应位于第 3 根柱子上,且从下到上编号严格递减。
1 1
2 2 3
0
1 3
2 1
3 1
2 3
1 2
1 3
2 3