A30955. 机器人拼图给定一块由 n × m 个格子组成的矩形拼图板,本题要求你根据给定的机械手移动指令集,将拼图中的碎片逐一放到指定位置。机械手每次抓取一块碎片,都会在拼图板的左上角位置等待指令。一个指令集是由 0-4 这五个数字组成的字符串,每个数字代表的意义如下:1:向右移动一格;2:向下移动一格;3:向左移动一格;4:向上移动一格;0:将碎片放置在当前位置,并结束这次任务。如果指令要求机械手移动到拼…
填空题
较易
知识点
题目描述
机器人拼图
给定一块由 n × m 个格子组成的矩形拼图板,本题要求你根据给定的机械手移动指令集,将拼图中的碎片逐一放到指定位置。
机械手每次抓取一块碎片,都会在拼图板的左上角位置等待指令。一个指令集是由 0-4 这五个数字组成的字符串,每个数字代表的意义如下:
- 1:向右移动一格;
- 2:向下移动一格;
- 3:向左移动一格;
- 4:向上移动一格;
- 0:将碎片放置在当前位置,并结束这次任务。
如果指令要求机械手移动到拼图板边界外,机械手会无视这个指令。如果接收到指令 0 时,当前位置上已经有一块碎片放好了,机械手会扔掉手里的碎片,结束这次任务。
输入
输入第一行给出 2 个正整数 n 和 m(1 ≤ n,m ≤ 100),随后一共有 n × m 行,第 i 行给出编号为 i(i=1,... n×m)的碎片对应的指令集,每条指令集一定以唯一的 0 结尾。(总的指令操作步数不超超过107)
输出
输出 n 行,每行 m 个整数,为放置在对应位置上的碎片编号。如果该位置上没有碎片,则输出 0。一行中的数字间以 1 个空格分隔,行首位不得有多余空格。
样例输入
2 3
1120
21140
34120
0
110
21111340样例输出
4 6 2
0 3 1参考答案
#include<iostream>
using namespace std;
int main() {
int n,m,a[105][105]={0};
cin>>n>>m;
for(int i=1;i<=n*m;i++){ //总共有n*m块碎片需要放置
string cmd;
cin>>cmd;
int x=0,y=0; //初始位置
for(int j=0;j<cmd.length();j++){
//识别指令 (注意防止超出边界)
if(cmd[j]=='1' && y<m-1) y++;
else if(cmd[j]=='2' && x<n-1) x++;
else if(cmd[j]=='3' && y>0) y--;
else if(cmd[j]=='4' && x>0) x--;
}
if(a[x][y]==0){ //该位置没用放过碎片
a[x][y] = i;
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
return 0;
}
上一题
下一题