首页 > 代码库 > 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 模拟