POJ 2632 Crashing Robots(较为繁琐的模拟)

题目链接:http://poj.org/problem?id=2632

题目大意:题意简单,N个机器人在一个A*B的网格上运动,告诉你机器人的起始位置和对它的具体操作,输出结果:

1.Robot i crashes into the wall, if robot i crashes into a wall. (A robot crashes into a wall if Xi = 0, Xi = A + 1, Yi = 0 or Yi = B + 1.) 撞墙

2.Robot i crashes into robot j, if robots i and j crash, and i is the moving robot. 两个机器人相撞

3.OK, if no crashing occurs.没有发生任何碰撞

思路:模拟模拟~~

用一个结构体变量记录每个robet的信息。。具体看代码吧:

  1 #include<iostream>
  2 #include<fstream>
  3 using namespace std;
  4 struct node
  5 {
  6     int id;
  7     int x;//机器人的坐标
  8     int y;
  9     char ch;//机器人的方向
 10 }robet[102];
 11 int main()
 12 {
 13     int T;
 14     scanf("%d",&T);
 15     while(T--)
 16     {
 17         int X,Y;
 18         cin>>X>>Y;
 19         int numrobet,times;
 20         cin>>numrobet>>times;
 21         int i;
 22         for(i=1; i<=numrobet; i++)
 23         {
 24             robet[i].id=i;
 25             cin>>robet[i].x>>robet[i].y>>robet[i].ch;//机器人的初始位置及朝向
 26         }
 27         int id,step,j,tage=0,k,r;
 28         char direction;
 29         for(i=1;i<=times;i++)
 30         {
 31             cin>>id>>direction>>step;//编号为id的机器人的操作和重复操作的次数
 32             for(j=1;j<=numrobet;j++)
 33             {
 34                 if(robet[j].id==id)
 35                 {
 36                     for(k=0;k<step;k++)
 37                     {
 38                         if(tage==1)
 39                             break;
 40                         else if(tage==0)//机器人的位置和方向的改变
 41                         {
 42                             if(robet[j].ch=='N')//如果机器人一开始朝北
 43                             {
 44                                 if(direction=='F')//操作“F”,向北进一
 45                                     robet[j].y+=1;
 46                                 else if(direction=='L')//操作“L”,向左转
 47                                     robet[j].ch='W';
 48                                 else if(direction=='R')//操作“R”,向右转
 49                                     robet[j].ch='E';
 50                             }
 51                             else if(robet[j].ch=='E')
 52                             {
 53                                 if(direction=='F')
 54                                     robet[j].x+=1;
 55                                 else if(direction=='L')
 56                                     robet[j].ch='N';
 57                                 else if(direction=='R')
 58                                     robet[j].ch='S';
 59                             }
 60                             else if(robet[j].ch=='W')
 61                             {
 62                                 if(direction=='F')
 63                                     robet[j].x-=1;
 64                                 else if(direction=='L')
 65                                     robet[j].ch='S';
 66                                 else if(direction=='R')
 67                                     robet[j].ch='N';
 68                             }
 69                             else if(robet[j].ch=='S')
 70                             {
 71                                 if(direction=='F')
 72                                     robet[j].y-=1;
 73                                 else if(direction=='L')
 74                                     robet[j].ch='E';
 75                                 else if(direction=='R')
 76                                     robet[j].ch='W';
 77                             }
 78                         }
 79                         if(robet[id].x<=0||robet[id].y<=0||robet[id].x>X||robet[id].y>Y)
 80                         {
 81                             cout<<"Robot "<<id<<" crashes into the wall"<<endl;
 82                             tage=1;
 83                             break;
 84                         }//判断撞墙
 85                         else
 86                         {
 87                             for(r=1; r<=numrobet; r++)
 88                             {
 89                                 if(robet[r].x==robet[id].x&&robet[r].y==robet[id].y&&r!=id)
 90                                 {
 91                                     cout<<"Robot "<<id<<" crashes into robot "<<r<<endl;
 92                                     tage=1;
 93                                 }
 94                             }
 95                             if(tage==1)
 96                                 break;
 97                         }//判断两个机器人相撞
 98                     }
 99                 }
100             }
101         }
102         if(tage==0)
103             cout<<"OK"<<endl;
104     }
105     return 0;
106 }
原文地址:https://www.cnblogs.com/PJQOOO/p/3984648.html