题意:一个房间由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;
}