/*
模拟机器人在方格中运动,判断是否会发生碰撞
题目的思路挺简单的,需要注意方格的表示和语言中矩阵的表示的区别,判断行进的位置
做这道题目是还理解了一下C结构体中数据的内存对齐问题,在定义结构体是最好是遵守字节对齐原则,
简单说就是长字节的先定义,这样可以节省一些空间
*/
#include<stdio.h>
#include<string.h>
#define MAX 130
char m[MAX][MAX];
struct Robot
{
int x;
int y;
int d;
}r[MAX];
int main()
{
int K,A,B,N,M;
int i,j,pos,repeat,flag,p,x,y;
char ch;
freopen("data","r",stdin);
scanf("%d",&K);
for(i=0;i<K;++i)
{
memset(m,0,sizeof(m));
scanf("%d%d",&A,&B);
scanf("%d%d",&N,&M);
for(j=1;j<=N;++j)
{
scanf("%d %d %c",&r[j].x,&r[j].y,&ch);
switch(ch)
{
case 'E':r[j].d=0;break;
case 'N':r[j].d=1;break;
case 'W':r[j].d=2;break;
case 'S':r[j].d=3;break;
}
m[ r[j].x ][ r[j].y ]=j;
}
flag = 0;
for(j=0;j<M;++j)
{
scanf("%d %c %d",&pos,&ch,&repeat);
if(!flag)
switch(ch)
{
case 'L':r[pos].d = (r[pos].d+repeat)%4;
break;
case 'R':r[pos].d = (r[pos].d+3*repeat)%4;
break;
case 'F':
switch(r[pos].d)
{
case 0:x=1;y=0;break;
case 1:x=0;y=1;break;
case 2:x=-1;y=0;break;
case 3:x=0;y=-1;break;
}
for(p=0;p<repeat;++p)
{
m[ r[pos].x ][ r[pos].y ]=0;
r[pos].x+=x;
r[pos].y+=y;
if(r[pos].x<1 || r[pos].x>A || r[pos].y<1 || r[pos].y>B)
{
printf("Robot %d crashes into the wall\n",pos);
flag=1;
break;
}else if(m[ r[pos].x ][ r[pos].y ]!=0)
{
printf("Robot %d crashes into robot %d\n",pos,m[ r[pos].x ][ r[pos].y ]);
flag =1;
break;
}else
{
m[ r[pos].x ][ r[pos].y ] = pos;
}
}
break;
}
}
if(!flag)
{
printf("OK\n");
}
}
}
分享到:
相关推荐
北大POJ2632-Crashing Robots 解题报告+AC代码
poj1379 给予平面内一个点集; 使用模拟退火求出一个点使该点到上述点集内任意一点最短距离最长。
POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类
poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题报告poj 解题...
POJ第1861题源码 POJ第1861题源码 POJ第1861题源码
poj分类poj分类poj分类poj分类
(6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996) 二.图算法: (1)图的深度优先遍历和广度优先遍历. (2)最短路径算法(dijkstra,bellman-ford,floyd,heap+dijkstra) (poj1860,poj3259,poj1062,poj2253,...
北大POJ1159-Palindrome 解题报告+AC代码
poj 3414解题报告poj 3414解题报告poj 3414解题报告poj 3414解题报告
poj 1012解题报告poj 1012解题报告poj 1012解题报告poj 1012解题报告
poj 2329解题报告poj 2329解题报告poj 2329解题报告poj 2329解题报告
poj 1659解题报告poj 1659解题报告poj 1659解题报告poj 1659解题报告
C语言 poj npu 西工大 C语言Poj答案全完整打包,给有需要的朋友
POJ1503解答 POJ1503解答,正确答案(已通过POJ)
POJ1083的代码,POJ1083的代码,POJ1083的代码
poj 百练 题目分类 poj 百练 题目分类
POJ1048,加强版的约瑟夫问题 难度中等
这是POJ上算法学习中推荐的50个题目,熟练编写这些程序,将会使算法水平大有调高
北大POJ2002-Squares 解题报告+AC代码
poj 1001答案