5_2 木块问题(UVa101)<vector的使用>
2016-04-07 14:55
211 查看
【背景】
在计算机科学中的很多地方都会使用简单,抽象的方法来做分析和实验验究。比如在早期的规划学和机器人学的人工智能研究就利用一个积木世界,让机械臂执行操作积木的任务。
在这个问题中,你将在确定的规则和约束条件下构建一个简单的积木世界。这不是让你来研究怎样达到某种状态,而是编写一个“机械臂程序”来响应有限的命令集。
【问题】
问题就是分析一系列的命令,告诉机械臂如何操纵放在一个平台上的积木。最初平台上有n个积木(编号由0到n-1),对于任意的0≤i<n-1,积木bi都与bi+1相临,图示如下:
图:积木世界的初始状态
机械臂操作积木的有效指令列举如下:
moveaontob
a和b都是积木的编号,先将a和b上面所有的积木都放回原处,再将a放在b上。
moveaoverb
a和b都是积木的编号,先将a上面所有的积木放回原处,再将a放在b上。(b上原有积木不动)
pileaontob
a和b都是积木的编号,将a和其上面所有的积极组成的一摞整体移动到b上。在移动前要先将b上面所有的积极都放回原处。移动的一摞积木要保持原来的顺序不变。
pileaoverb
a和b都是积木的编号,将a和其上面所有的积极组成的一摞整体移动到b所在一摞积木的最上面一个积木上。移动的一摞积木要保持原来的顺序不变。
quit
结束积木世界的操纵。
当a=b或a和b处在同一摞时,任何企图操作a和b的命令都是非法的。所有非法的命令都要忽略,且不能对当前积木的状态产生作用。
【输入】
输入由1个整数n开始开始,该整数独占一行,表示积木世界中的积木数量。你可以假定0<n<25。
从积木数量值的下一行开始是一系列的命令,每条命令独占一行。你的程序要处理所有的命令直到输入退出命令。
你可以假定所有的命令都按上文所示的格式给出。不会出现语法错误的命令。
【输出】
以积木世界的最终状态作为输出。每一个原始积木的位置i(0≤i<n,n为积木数量)后面都要紧跟一个冒号。如果至少有一个积木在该位置上,冒号后面都要紧跟一个空格,然后是该位置上所有积木编号的序列。每2个积木的编号之间以一个空格隔开。行尾不能出现多余的空格。
每个积木位置独占一行(即第一行输入的n,对应输出n行数据)。
【样例输入】
【样例输出】
在计算机科学中的很多地方都会使用简单,抽象的方法来做分析和实验验究。比如在早期的规划学和机器人学的人工智能研究就利用一个积木世界,让机械臂执行操作积木的任务。
在这个问题中,你将在确定的规则和约束条件下构建一个简单的积木世界。这不是让你来研究怎样达到某种状态,而是编写一个“机械臂程序”来响应有限的命令集。
【问题】
问题就是分析一系列的命令,告诉机械臂如何操纵放在一个平台上的积木。最初平台上有n个积木(编号由0到n-1),对于任意的0≤i<n-1,积木bi都与bi+1相临,图示如下:
机械臂操作积木的有效指令列举如下:
moveaontob
a和b都是积木的编号,先将a和b上面所有的积木都放回原处,再将a放在b上。
moveaoverb
a和b都是积木的编号,先将a上面所有的积木放回原处,再将a放在b上。(b上原有积木不动)
pileaontob
a和b都是积木的编号,将a和其上面所有的积极组成的一摞整体移动到b上。在移动前要先将b上面所有的积极都放回原处。移动的一摞积木要保持原来的顺序不变。
pileaoverb
a和b都是积木的编号,将a和其上面所有的积极组成的一摞整体移动到b所在一摞积木的最上面一个积木上。移动的一摞积木要保持原来的顺序不变。
quit
结束积木世界的操纵。
当a=b或a和b处在同一摞时,任何企图操作a和b的命令都是非法的。所有非法的命令都要忽略,且不能对当前积木的状态产生作用。
【输入】
输入由1个整数n开始开始,该整数独占一行,表示积木世界中的积木数量。你可以假定0<n<25。
从积木数量值的下一行开始是一系列的命令,每条命令独占一行。你的程序要处理所有的命令直到输入退出命令。
你可以假定所有的命令都按上文所示的格式给出。不会出现语法错误的命令。
【输出】
以积木世界的最终状态作为输出。每一个原始积木的位置i(0≤i<n,n为积木数量)后面都要紧跟一个冒号。如果至少有一个积木在该位置上,冒号后面都要紧跟一个空格,然后是该位置上所有积木编号的序列。每2个积木的编号之间以一个空格隔开。行尾不能出现多余的空格。
每个积木位置独占一行(即第一行输入的n,对应输出n行数据)。
【样例输入】
10 move9onto1 move8over1 move7over1 move6over1 pile8over6 pile8over5 move2over1 move4over9 quit
【样例输出】
0:0 1:1924 2: 3:3 4: 5:5876 6: 7: 8: 9: 【分析与说明】 这道题核心使用vector<int>pile[maxn],所有操作都是围绕它进行的。vector就像一个二维数组,只是第一维的大小是固定的(不超过maxn),但第二维的大小就不固定了。要充分理解透它。 vector是一个不定长组数,可以用clear()清空,resize()改变大小,用push_back()和pop_back()在尾部添加和删除元素,用empty()测试是否为空。vector之间可以直接赋值或作为函数的返回值。
相关文章推荐
- 052(三十)
- ubunto开启root账户并开启SSH远程访问
- Spring事务Transaction配置的五种注入方式详解
- 一个程序员的时间管理
- 史上最全的maven pom.xml文件教程详解
- RabbitMq、ActiveMq、ZeroMq、kafka之间的比较,资料汇总
- [poj 2331] Water pipe ID A*迭代加深搜索(dfs)
- java中两种随机数的产生方式
- 样本不均衡问题--过拟合欠拟合抽样
- Oracle ORA-01940 无法删除当前已连接用户
- Qt Windows下开机自动启动自己的程序
- Qt QDebug等重定向到文件中
- qt执行cmd命令
- QT中QProcess调用命令行的痛苦经历
- iOS彩票项目--第一天,自定义TabBar控制器和自定义TabBar,自定义导航控制器
- RAID阵列的迁移
- 图片下拉缩放效果
- android打包
- 用C++设计一个不能被继承的类
- RxJava和RxBus代替EventBus