#650. 木块问题(The Blocks Problem. UVa 101)
木块问题(The Blocks Problem. UVa 101)
背景
计算机科学的许多领域都使用简单、抽象的领域进行分析和实证研究。 例如,早期的一项关于规划和机器人技术的人工智能研究(STRIPS)使用了若干个积木块创建一个积木世界,其中机器人手臂执行涉及操纵积木块的任务。 在这个问题中,您将在某些规则和约束下对一个简单的积木块世界进行建模。相反除了确定如何达到指定状态,您还将“编程”一个机器人手臂来响应有限的命令集。
问题描述
你将解析一系列命令,这些命令指示机器人手臂如何操纵积木块。
最初,桌面上平放着n个积木块(从0到n-1编号)b(i)积木块与b(i+1)积木块相邻,适用于所有0≤i<n-1,如下图所示:
操纵积木块的机器人手臂的有效命令是:
• move a onto b 把a和b上方的木块全部归位,然后把a摞到b上面。
• move a over b: 把 a 上方的木块归位,然后把 a 放在 b 所在木块堆的最上方。
• pile a onto b: 把b上方的木块全部归位,然后把a及a上面的木块摞在b上面。
• pile a over b: 把a及上面的木块整体摞在b所在木块堆的顶部。
注:这里a和b是积木块编号,,如果有非法指令(如 a 与 b 在同一堆),无需处理。
Format
Input
第一行输入n,表示有积木块的数目 0<n<25。 第二行块的数量后面是一系列块命令,每行一个命令。你的 程序应处理所有命令,直到遇到退出命令。
Output
输出应该积木世界的最终状态。 一共有n行输出,首先是每个原始块编号i(0≤i<n,其中n是块的数量),紧随其后是一个冒号。 如果该位置有积木块,则冒号后一个空格,之后是该位置的积木块编号,用空格隔开。
Samples
10
move 9 onto 1
move 8 over 1
move 7 over 1
move 6 over 1
pile 8 over 6
pile 8 over 5
move 2 over 1
move 4 over 9
quit
0: 0
1: 1 9 2 4
2:
3: 3
4:
5: 5 8 7 6
6:
7:
8:
9:
Limitation
1s, 1024KiB for each test case.
Related
In following homework: