测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题