A×B 工厂地图,N 个机器人(N≤100),M 条指令(M≤100)。指令:L/R 转向,F 前进 k 步。模拟执行,报告首次碰撞(撞墙或撞机器人),或 OK。
dir = (dir + k) % 4,R:dir = (dir + 4 - k%4) % 4map[x][y] 存机器人编号(0 为空)#include#include using namespace std; int map[105][105], A, B; struct Robot { int x, y, dir; } r[101]; bool moveForward(int id, int step) { int x = r[id].x, y = r[id].y, d = r[id].dir; map[x][y] = 0; for (int i=1; i<=step; ++i) { int nx = x, ny = y; if (d==0) ny += 1; else if (d==1) nx -= 1; else if (d==2) ny -= 1; else nx += 1; if (nx<1 || nx>A || ny<1 || ny>B) { cout << "Robot " << id << " crashes into the wall" << endl; return false; } if (map[nx][ny]) { cout << "Robot " << id << " crashes into robot " << map[nx][ny] << endl; return false; } x = nx; y = ny; } map[x][y] = id; r[id].x = x; r[id].y = y; return true; } int main() { int K; cin >> K; while (K--) { int N, M; cin >> A >> B >> N >> M; memset(map, 0, sizeof(map)); for (int i=1;i<=N;++i) { char c; cin >> r[i].x >> r[i].y >> c; r[i].dir = (c=='N'?0:c=='W'?1:c=='S'?2:3); map[r[i].x][r[i].y] = i; } bool ok = true; while (M--) { int id, step; char cmd; cin >> id >> cmd >> step; if (!ok) continue; if (cmd=='L') r[id].dir = (r[id].dir + step) % 4; else if (cmd=='R') r[id].dir = (r[id].dir + 4 - step%4) % 4; else ok = moveForward(id, step); } if (ok) cout << "OK" << endl; } return 0; }