#P810. 超级汉诺塔(shanoi)
超级汉诺塔(shanoi)
题目描述:
也许你早就对传统的汉诺塔游戏玩腻了,那么来试试我们的超级汉诺塔(super hanoi=shanoi)吧!
三个柱子编号分别为1、2、3,初始时n个盘子按照编号上小下大的次序放在第一个柱子上,需要将所有的盘子由柱子1移至柱子3。限制是:第一、任何时候,只能编号小的盘子放在大的盘子上面,;第二、只能在柱子1、2和柱子2、3间移动,不能直接在柱子1、3间移动。现在有两个人A和B同时移动柱子,A只负责在柱子1、2之间移动盘子,B只负责在柱子2、3之间移动盘子,每人每秒最多只能移动一个盘子,也就是说可以在A进行柱子1、2间的移动的同时(即同一秒内)由B进行柱子2、3间的移动,当然也可以有一个人闲着。要求输出移动的最短时间和具体步骤。
输入(shanoi.in):
只有一个整数和一个回车/换行符,代表共有n个盘子。
输出(shanoi.out):
第一行输出需要的总时间m(秒数),第二行起的m行每行输出四个整数表示这一秒的行动:前两个整数表示左边的那个人将几号盘子移到了几号柱子上,后两个整数表示右边的那个人将几号盘子移到了几号柱子上,如果某人在这一秒没有行动,则相应的整数为0 0。输出以换行/回车符结尾。
示例:
2
6
1 2 0 0
2 2 1 3
0 0 1 2
1 1 2 3
1 2 0 0
0 0 1 3