现在的位置: 首页 > 算法 > 正文

poj2632

2019年11月09日 算法 ⁄ 共 2805字 ⁄ 字号 评论关闭
//纯模拟 
#include<iostream>
#include<cstring>
using namespace std;
int map[101][101],A,B;
struct node
{
	char direction;
	int x,y;
};
node robot[101];
bool judge;
void F(int no,int repeat)
{
	int i;
	map[robot[no].x][robot[no].y]=0;
	if(robot[no].direction=='N')
	for(i=1;i<=repeat&&(0<robot[no].y&&robot[no].y<=B)&&map[robot[no].x][robot[no].y]==0;i++)
	robot[no].y++;
	else if(robot[no].direction=='S')
	for(i=1;i<=repeat&&(0<robot[no].y&&robot[no].y<=B)&&map[robot[no].x][robot[no].y]==0;i++)
	robot[no].y--;
	else if(robot[no].direction=='W')
	for(i=1;i<=repeat&&(0<robot[no].x&&robot[no].x<=A)&&map[robot[no].x][robot[no].y]==0;i++)
	robot[no].x--;
	else
	for(i=1;i<=repeat&&(0<robot[no].x&&robot[no].x<=A)&&map[robot[no].x][robot[no].y]==0;i++)
	robot[no].x++;
	if(robot[no].x<=0||robot[no].x>A||robot[no].y<=0||robot[no].y>B)
	{
		printf("Robot %d crashes into the wall\n",no);
		judge=1;
		return;
	}
	if(map[robot[no].x][robot[no].y]==0)
	map[robot[no].x][robot[no].y]=no;
	else
	{
		printf("Robot %d crashes into robot %d\n",no,map[robot[no].x][robot[no].y]);
		judge=1;
	}
}
void L(int no,int repeat)
{
	repeat%=4;
	if(repeat==1)
	{
		if(robot[no].direction=='W')
		robot[no].direction='S';
		else if(robot[no].direction=='S')
		robot[no].direction='E';
		else if(robot[no].direction=='E')
		robot[no].direction='N';
		else
		robot[no].direction='W';
	}
	else if(repeat==2)
	{
		if(robot[no].direction=='W')
		robot[no].direction='E';
		else if(robot[no].direction=='S')
		robot[no].direction='N';
		else if(robot[no].direction=='E')
		robot[no].direction='W';
		else
		robot[no].direction='S';
	}
	else if(repeat==3)
	{
		if(robot[no].direction=='W')
		robot[no].direction='N';
		else if(robot[no].direction=='S')
		robot[no].direction='W';
		else if(robot[no].direction=='E')
		robot[no].direction='S';
		else
		robot[no].direction='E';
	}
}
void R(int no,int repeat)
{
	repeat%=4;
	if(repeat==1)
	{
		if(robot[no].direction=='W')
		robot[no].direction='N';
		else if(robot[no].direction=='S')
		robot[no].direction='W';
		else if(robot[no].direction=='E')
		robot[no].direction='S';
		else
		robot[no].direction='E';
	}
	else if(repeat==2)
	{
		if(robot[no].direction=='W')
		robot[no].direction='E';
		else if(robot[no].direction=='S')
		robot[no].direction='N';
		else if(robot[no].direction=='E')
		robot[no].direction='W';
		else
		robot[no].direction='S';
	}
	else if(repeat==3)
	{
		if(robot[no].direction=='W')
		robot[no].direction='S';
		else if(robot[no].direction=='S')
		robot[no].direction='E';
		else if(robot[no].direction=='E')
		robot[no].direction='N';
		else
		robot[no].direction='W';
	}
}
void zhiling(int no,char action,int repeat)
{
	if(action=='F')
	F(no,repeat);
	else if(action=='L')
	L(no,repeat);
	else
	R(no,repeat);
}
int main()
{
	int K,i,n,m,x,y,no,repeat;
	char temp[2];
	scanf("%d",&K);
	while(K--)
	{
		memset(map,0,sizeof(map));
		scanf("%d%d",&A,&B);
		scanf("%d%d",&n,&m);
		for(i=1;i<=n;i++)
		{
			scanf("%d%d%s",&x,&y,temp);
			robot[i].x=x;
			robot[i].y=y;
			robot[i].direction=temp[0];
			map[x][y]=i;
		}
		judge=0;
		for(i=1;i<=m;i++)
		{
			scanf("%d%s%d",&no,temp,&repeat);
			if(judge==0)
			zhiling(no,temp[0],repeat);
		}
		if(judge==0)
		printf("OK\n");
	}
}

【上篇】
【下篇】

抱歉!评论已关闭.