首页 > 代码库 > poj 2632 Crashing Robots 模拟
poj 2632 Crashing Robots 模拟
题目链接:
http://poj.org/problem?id=2632
题目描述:
有一个B*A的厂库,分布了n个机器人,机器人编号1~n。我们知道刚开始时全部机器人的位置和朝向,我们可以按顺序操控机器人,没有两个机器人可以同时执行命令。如果机器人走到厂库边界,他将碰到墙,如果两个机器人走到同一位置,则表示他们两个相撞。问m个命令内最先发生的碰撞,如果没有碰撞输出“OK”。
解题思路:
由图可知,本题的矩阵与平时的不太一样,
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <iostream> 5 using namespace std; 6 7 #define maxn 105 8 9 struct node10 {11 int x, y, s;12 } stu[maxn];13 14 int dir[4][2] = {-1,0, 0,1, 1,0, 0,-1};15 int map[maxn][maxn];16 17 int main()18 {19 int t, A, B, n, m, i, j, flag, x, y, num1, num2;20 char ch[2];21 22 scanf ("%d", &t);23 while (t --)24 {25 flag = 0;26 scanf ("%d %d", &A, &B);27 scanf ("%d %d", &n, &m);28 memset (map, 0, sizeof(map));29 for (i=1; i<=n; i++)30 {31 scanf ("%d %d %s", &stu[i].x, &stu[i].y, ch);32 if (ch[0] == ‘W‘)33 stu[i].s = 0;34 else if (ch[0] == ‘N‘)35 stu[i].s = 1;36 else if (ch[0] == ‘E‘)37 stu[i].s = 2;38 else39 stu[i].s = 3;40 map[stu[i].x][stu[i].y] = i;41 }42 43 while (m --)44 {45 scanf ("%d%s%d", &x, ch, &y);46 if (flag)47 continue;48 if (ch[0] == ‘L‘)49 {50 stu[x].s -= y % 4;51 stu[x].s = (stu[x].s + 4) % 4;52 }53 else if (ch[0] == ‘R‘)54 }55 stu[x].s += y;56 stu[x].s = (stu[x].s + 4) % 4;57 }58 else59 {60 map[stu[x].x][stu[x].y] = 0;61 while (y --)62 {63 stu[x].x = stu[x].x + dir[stu[x].s][0];64 stu[x].y = stu[x].y + dir[stu[x].s][1];65 if (stu[x].x<=0 || stu[x].x>A || stu[x].y<=0 || stu[x].y>B)66 {67 num1 = x;68 flag = 1;69 break;70 }71 else if (map[stu[x].x][stu[x].y])72 {73 num1 = x;74 num2 = map[stu[x].x][stu[x].y];75 flag = 2;76 break;77 }78 }79 map[stu[x].x][stu[x].y] = x;80 }81 }82 if (! flag)83 printf ("OK\n");84 else if (flag == 1)85 printf ("Robot %d crashes into the wall\n", num1);86 else87 printf ("Robot %d crashes into robot %d\n", num1, num2);88 }89 return 0;90 }
poj 2632 Crashing Robots 模拟
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。