注意数组index跟图中index并不相同,把图垂直翻转一下就可以了,SN方向要对调一下,向左其实是向右,向右是向左。
#include<iostream>
#include<fstream>
using namespace std;
short board[101][101],from,to;
int times;
int A,B,N,M,x,y,id,repeat;
char c;
short px[101],py[101],pc[101];
void forward(int id){
switch(pc[id]){
case 0:
x=px[id];
y=py[id]-1;
break;
case 1:
x=px[id]+1;
y=py[id];
break;
case 2:
x=px[id];
y=py[id]+1;
break;
case 3:
x=px[id]-1;
y=py[id];
break;
}
if(x<1||x>A||y<0||y>B){
from=id;
}else if(board[x][y]!=0){
from=id;
to=board[x][y];
}else{
board[x][y]=id;
board[px[id]][py[id]]=0;
px[id]=x;
py[id]=y;
}
}
short ctoi(char c){
short res;
switch(c){
case 'S':res=0;break;
case 'E':res=1;break;
case 'N':res=2;break;
case 'W':res=3;break;
}
return res;
}
int main(){
//streambuf *backup;
// ifstream fin;
// fin.open("data.in");
// backup = cin.rdbuf(); // back up cin's streambuf
// cin.rdbuf(fin.rdbuf()); // assign file's streambuf to cin
cin>>times;
while(times--){
cin>>A>>B;
cin>>N>>M;
memset(board,0,sizeof(board));
memset(px,0,sizeof(px));
memset(py,0,sizeof(py));
from=to=0;
for(int i=0;i<N;i++){
cin>>x>>y>>c;
px[i+1]=x;
py[i+1]=y;
pc[i+1]=ctoi(c);
board[x][y]=i+1;
}
for(int i=0;i<M;i++){
cin>>id>>c>>repeat;
while(from==0&&(repeat>0)){
repeat--;
if(from==0){
switch(c){
case 'L':pc[id]=(pc[id]+5)%4;break;
case 'R':pc[id]=(pc[id]+3)%4;break;
case 'F':forward(id);break;
}
}
}
}
if(from==0){
cout<<"OK"<<endl;
}else if(to!=0){
cout<<"Robot "<<from<<" crashes into robot "<<to<<endl;
}else{
cout<<"Robot "<<from<<" crashes into the wall"<<endl;
}
}
return 0;
}