poj 2632
题意:一个房间由m*n个方块组成 每个机器人占据一个方块 这些机器人能够移动 问 这些机器人的移动动作全部完成后 会不会发生冲撞事件
解题策略:简单的模拟题目
#include<iostream> #include<cstring> using namespace std; struct Node { int x,y; int dir; }p[10000],map[111][111]; int dir[4][2]={1,0,-1,0,0,-1,0,1}; int main() { char c; int t,x,y; int m,n,i; int sum,instu; bool ok; cin>>t; while(t--) { cin>>m>>n; memset(map,0,sizeof(map)); cin>>sum>>instu; for(i=1;i<=sum;i++) { cin>>x>>y>>c; switch(c) { case 'N':p[i].x=x;p[i].y=y;p[i].dir=1;break; case 'S':p[i].x=x;p[i].y=y;p[i].dir=2;break; case 'W':p[i].x=x;p[i].y=y;p[i].dir=3;break; case 'E':p[i].x=x;p[i].y=y;p[i].dir=4;break; } map[x][y].dir=i; } ok=false; while(instu--) { cin>>x>>c>>y; if(ok) continue; if(c=='L') { for(i=1;i<=y;i++) { if(p[x].dir==1) p[x].dir=3; else if(p[x].dir==2) p[x].dir=4; else if(p[x].dir==3) p[x].dir=2; else p[x].dir=1; } } if(c=='R') { for(i=1;i<=y;i++) { if(p[x].dir==1) p[x].dir=4; else if(p[x].dir==2) p[x].dir=3; else if(p[x].dir==3) p[x].dir=1; else p[x].dir=2; } } if(c=='F') { for(i=1;i<=y;i++) { map[p[x].x][p[x].y].dir=0; p[x].y+=dir[p[x].dir-1][0]; p[x].x+=dir[p[x].dir-1][1]; if(map[p[x].x][p[x].y].dir) { cout<<"Robot "<<x<<" crashes into robot "<<map[p[x].x][p[x].y].dir<<endl; break; } if(p[x].x>m||p[x].x<=0||p[x].y>n||p[x].y<=0) { cout<<"Robot "<<x<<" crashes into the wall"<<endl; break; } map[p[x].x][p[x].y].dir=x; } if(i<=y) ok=true; } } if(!ok) cout<<"OK"<<endl; } return 0; }