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;
}



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

论WordPress网站robots.txt的正确写法

robots.txt文件是一个应该存放在网站根目录里面的文本文件,该文件是用来正确引导搜索引擎抓取和收录页面的,用来告诉搜索引擎哪些页面可以收录而哪些不可以,所以正确编写robots.txt文件显得尤...
  • luyong3435
  • luyong3435
  • 2014年05月20日 21:56
  • 5933

浅谈Robots.txt文件给网站带来的好处

作为一名web优化职员,我们都很清楚robots.txt文件对我们网站的需要性,Robots.txt文件只不过一个纯文本文件,它就像web地图异样,给搜寻引擎指明线路,当蜘蛛搜索一个站点时,它起首蒲伏...
  • u013366453
  • u013366453
  • 2014年03月27日 22:05
  • 1156

网络爬虫排除协议robots.txt介绍及写法详解.

以上内容转载自:www.xgezhang.com Robots协议的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),它的功能是通过Robots文件告...
  • u014237185
  • u014237185
  • 2014年09月16日 16:31
  • 1774

POJ2632-Crashing Robots

  • 2011年07月29日 20:34
  • 21KB
  • 下载

POJ 2632 Crashing Robots 机器人模拟

这也是一道模拟题,同上次发的模拟题一样,这题对我而言也是比较难的模拟题了。题意:大概就是有N个机器人放在了同一片地方,他们拥有自己的起始坐标位置,每个机器人也都有自己的编号,然后输入多条让不同机器人移...
  • woshizhhblog
  • woshizhhblog
  • 2016年08月13日 14:29
  • 259

POJ2632-Crashing Robots(模拟)

题目详情点此查看 花了近一个小时,总算是AC了, 其实这题比较简单,没啥算法,题目详情点击链接; 主要由以下事项: 1.我用的是二维数组,然后其(0, 0)点的位置与直角坐标系的远点位...
  • zq216991
  • zq216991
  • 2016年08月31日 21:09
  • 129

POJ2632-Crashing Robots

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

poj-2632-- Crashing Robots -- 模拟法

Description In a modernized warehouse, robots are used to fetch the goods. Careful planning is ne...
  • RIPwangh
  • RIPwangh
  • 2015年07月30日 14:43
  • 491

POJ 2632 Crashing Robots 模拟

题意:一个矩形,分成了A*B个大小相同的正方形,把n个机器人放在某些小正方形里,给他们一些指令,他们会一步一步按指令行动,每次只有一个机器人行动。如果两个机器人在同一个小正方形里了他们会相撞;如果出界...
  • Tsaid
  • Tsaid
  • 2011年09月09日 17:04
  • 520

POJ 2632-Crashing Robots(模拟-robot移动)

Crashing Robots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10491 ...
  • MIKASA3
  • MIKASA3
  • 2017年01月19日 22:25
  • 301
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj2632Crashing Robots
举报原因:
原因补充:

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