poj 2362 Crashing Robots

来源:互联网 发布:list去除重复数据 编辑:程序博客网 时间:2024/04/30 05:08

期末考完了  今天做了个水模拟。。。。。

#include<iostream>#include<algorithm>#include<string.h>#include<stack>#include<queue>#include<math.h>#include<cstdio>using namespace std;struct node{int x,y;char dir[2];}p[110];struct query{int num,re;char op[2];}q[110];int map[110][110];char f[5]={"NESW"};int n,m;bool iscrash_wall(node a){return (a.x<1 || a.x>n || a.y<1 || a.y>m);}int iscrash_robit(node a){return map[a.x][a.y];}int getdir(node a){if(a.dir[0]=='N')return 0;if(a.dir[0]=='E')return 1;if(a.dir[0]=='S')return 2;if(a.dir[0]=='W')return 3;}void go(node &s){if(s.dir[0]=='E')s.x += 1;else if(s.dir[0]=='W')s.x -= 1;else if(s.dir[0]=='N')s.y += 1;else s.y -= 1;}int move(int num,char *s,int re){node t;t.x=p[num].x;t.y=p[num].y;t.dir[0]=p[num].dir[0];if(s[0]=='F'){for(int i=0;i<re;i++){go(t);if(iscrash_wall(t) && !iscrash_robit(t))return 200;else if(iscrash_robit(t))return iscrash_robit(t);else {map[t.x][t.y]=num;map[p[num].x][p[num].y]=0;p[num]=t;}}}else if(s[0]=='L'){int tmp=re%4;p[num].dir[0]=f[(getdir(p[num])-tmp+4)%4];}else if(s[0]=='R'){int tmp=re%4;p[num].dir[0]=f[(getdir(p[num])+tmp+4)%4];}return 0;}int main(){int robit,ins;int num,re;int t;scanf("%d",&t);while(t--){scanf("%d%d",&n,&m);scanf("%d%d",&robit,&ins);memset(map,0,sizeof(map));for(int i=1;i<=robit;i++){scanf("%d%d%s",&p[i].x,&p[i].y,p[i].dir);map[p[i].x][p[i].y]=i;}bool flag=true;for(int i=0;i<ins;i++)scanf("%d%s%d",&q[i].num,q[i].op,&q[i].re);for(int i=0;i<ins;i++){int ret=move(q[i].num,q[i].op,q[i].re);if(ret==200){printf("Robot %d crashes into the wall\n",q[i].num);flag=0;}else if(ret>0 && ret<200){printf("Robot %d crashes into robot %d\n",q[i].num,ret);flag=0;}if(!flag) break;}if(flag) puts("OK");}return 0;}


原创粉丝点击