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;

}    

 

 

你可能感兴趣的:(Crash)