poj2632Crashing Robots

原创 2016年06月02日 12:24:27

http://poj.org/problem?id=2632

模拟算法:将整个过程完完整整的走一遍。题目怎么叙述的,程序就怎么运行。所以模拟题对算法设计的要求不高,但是需要大家选择最适当的数据结构来进行模拟,模拟题一般都很繁琐,所以信心和精心是必不可少的。

本题注意点挺多的,变量也很多,稍不注意就会错~~微笑也算是一道比较让人头疼的模拟题了。

#include <stdio.h>
#include <string.h>
int array[101][101];
int a,b;
int xf[4]={-1,0,1,0};
int yf[4]={0,1,0,-1};
struct Robot//自定义数据结构
{
    int x,y,d;
}robot[101];//every robot's current position and direction

int forward(int s,int t)//< robot #> < repeat> 
{
	int x,y,i;
	int d = robot[s].d;//取出当前方向
	x=robot[s].x;
	y=robot[s].y;//取出当前位置
	array[x][y]=0;//更新array[][]
	for(i=0;i<t;i++)
	{
		x =  x + xf[d];
		y =  y + yf[d];
		if(x<1 || x>a || y<1 || y>b)
		{
		    printf("Robot %d crashes into the wall\n",s);
		    return 1;
		}
		if(array[x][y])
		{
		    printf("Robot %d crashes into robot %d\n",s,array[x][y]);
		    return 1;
		}
	}
	robot[s].x=x;//更新当前所在位置
	robot[s].y=y;
	array[x][y]=s;//更新array[][]
	return 0;
}

int action(int s,char dir,int t)//instruction:< robot #> < action> < repeat> 
{
    //对于'F'指令,需判断前进是否出界和前进的位置是否已有机器人
    //对于'L'和'R'转向指令,只需修改机器人的方向值,注意同一方向转四次等于没转
	switch (dir)
	{
		case 'F':return forward(s,t);
		case 'L':robot[s].d=(robot[s].d-t%4+4)%4;break;
		case 'R':robot[s].d=(robot[s].d+t%4)%4;break;
	}
	return 0;
}

int main()
{
	int k,n,m,xi,yi,i,j,s,t;
	int f=0;
	char dir;
	scanf("%d",&k);//test numbers
	for(i=0;i<k;i++)
	{
		memset(array,0,sizeof(array));
		memset(robot,0,sizeof(robot));
		scanf("%d %d",&a,&b);// the size of the warehouse in meters
		scanf("%d %d",&n,&m);//the numbers of robots and instructions respectively
		for(j=0;j<n;j++)//n个机器人
		{
			scanf("%d %d %c",&xi,&yi,&dir);//the starting position and direction of each robot
			array[xi][yi]=j+1;//array[xi][yj]代表(xi,yj)位置处的robot编号,没有则为0
			robot[j+1].x=xi;
			robot[j+1].y=yi;//init current position
			switch(dir)//init current direction
			{
				case 'W':robot[j+1].d=0;break;
				case 'N':robot[j+1].d=1;break;
				case 'E':robot[j+1].d=2;break;
				case 'S':robot[j+1].d=3;break;
				default:robot[j+1].d=-1;
			}
		}
		f=0;
		for(j=0;j<m;j++)//m条指令
		{
			scanf("%d %c %d",&s,&dir,&t);//instruction:< robot #> < action> < repeat> 
			if(f==0)
			{
			    f=action(s,dir,t);//action只有两种可能,发生碰撞返回1,无碰撞返回0
			}
		}
		if(f==0)
		    printf("OK\n");
	}
	return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

poj2632

一开始不小心把测试也写了进去,然后WA了好几遍。。。。。。 模拟题,题目比较难懂,而且坐标是倒过来的,输入是先输入列的长度,然后只要某一个机器人先撞到墙或其他机器人就可以直接忽略后面直接输出了 只...

Crashing Robots POJ2632

Crashing Robots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4556  ...

poj2632--模拟

/** \brief poj 2632 * * \param date 2014/8/3 * \param state AC * \return memory 776k time 16ms ...

POJ2632-Crashing Robots

转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1299147655   提示:简单的模拟而已。。。程序很长不是因为算法(根本就没算法...

POJ2632-Crashing Robots

  • 2011-07-29 20:34
  • 21KB
  • 下载

poj2632Crashing Robots

模拟题,代码长的有点小过分,总算改出来了。。。该死的机器人们 #include #include using namespace std; int k,a,b,n,m; int num,times...

POJ 2632 Crashing Robots

POJ 3480 Crashing Robots[★★☆☆☆]模拟 题目大意:输入仓库大小,和机器人的位置,朝向。根据指令进行操作,如果两个机器人相撞或者机器人撞墙则输出,结束。 样例输入: 4 ...

poj 2632Crashing Robots

水的一比。。。 不过,看discuss 想说:这和想:这和有关系吗? 只要按照自己所制定的规则走下去好了。。不过写了320 行,一个小时(顺便重刷了高达uc,开心)。。复制啊复制。。。#include...

poj2632 Crashing Robots

第一次WA了,因为还没给题目的数据输入完就输出答案了,没输进去的数据自然会不高兴 ̄へ ̄ 第二次runtime error,因为数组越界,醉了(ಥ _ ಥ) 学到了新的输入输出数据的方法(解放手指头!)...

POJ 一 2632 Crashing Robots

Crashing Robots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6791  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)