POJ 2632 Crashing Robots【模拟题】

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

 

 

posted on 2013-02-10 23:46  crying_Dream  阅读(154)  评论(0编辑  收藏  举报