poj 2632

注意数组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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值