您的位置:首页 > 其它

POJ 2632 Crashing Robots【模拟题】

2013-02-10 23:46 561 查看
208K 16MS 2379B 2013-02-10 23:04:05 1A 蛇年第一A

1》机器人有3种属性:横坐标x, 纵坐标y, 面向dir。因此用结构体存机器人的信息,规定E为0, N为1,w为2, S为3
2》 如果是向前走:
if(方向==0) x++; if(方向==1) y++; if(方向==2) x--; if(方向==3) y--;
3》转弯:
向走转n次:方向dir=(dir+n)%4;
向右转n次:方向dir=(dir-n%4+4)%4;
4》判断是否和别的机器人发生碰撞,int visit[i][j]=k,表示坐标为(x, y)处有机器人k
5》为了处理方便且不影响后面的输入将M行指挥机器人的信息存在结构体内

View Code

#include<stdio.h>
#include<string.h>
char dirc[4]={'E', 'N', 'W', 'S'};
int visit[105][105];
struct Robot
{
int x, y, dir;
};
struct Minfor
{
int r, ti;
char ai[5];
};
int main()
{
int T, n, m, a, b, i, j;
char d[5];
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &a, &b);
scanf("%d%d", &n, &m);
Robot R[105];
Minfor MM[105];
memset(visit, 0, sizeof(visit));
for(i=1; i<=n; i++)
{
scanf("%d%d%s", &R[i].x, &R[i].y, d);
if(d[0]=='E') R[i].dir=0;
if(d[0]=='N') R[i].dir=1;
if(d[0]=='W') R[i].dir=2;
if(d[0]=='S') R[i].dir=3;
visit[R[i].x][R[i].y]=i;
}
for(i=1; i<=m; i++)
scanf("%d%s%d", &MM[i].r, MM[i].ai, &MM[i].ti);
int flag=0;
for(i=1; i<=m; i++)
{
int rr=MM[i].r;
if(MM[i].ai[0]=='F')  //向前走
{
int xx=R[rr].x, yy=R[rr].y, dd=R[rr].dir;
visit[xx][yy]=0; //恢复现场
for(j=1; j<=MM[i].ti; j++)  //每走一步都会进行判断一下
{
if(dd==0) xx++;
if(dd==1) yy++;
if(dd==2) xx--;
if(dd==3) yy--;
if(xx<1||xx>a||yy<1||yy>b)
{
flag=1;
printf("Robot %d crashes into the wall\n", rr);
break;
}
if(visit[xx][yy])
{
flag=1;
printf("Robot %d crashes into robot %d\n", rr, visit[xx][yy]);
break;
}
}
if(flag)  break;
R[rr].x=xx, R[rr].y=yy;
visit[xx][yy]=rr;
}
if(MM[i].ai[0]=='L')
{
int dd=R[rr].dir;
dd=(dd+MM[i].ti)%4;
R[rr].dir=dd;
}
if(MM[i].ai[0]=='R')
{
int dd=R[rr].dir;
dd=(dd-MM[i].ti%4+4)%4;
R[rr].dir=dd;
}
}
if(i==m+1)
printf("OK\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: