zoukankan      html  css  js  c++  java
  • 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;
    }    
  • 相关阅读:
    day21作业
    作业day20
    K8S架构图
    day20 类的继承
    课上随手记
    第一篇CEPH集群的学习
    day19 类的讲解
    Eureka工作原理
    局域网、以太网(标准以太网、工业以太网和实时以太网)与无线局域网
    无线局域网,有线局域网
  • 原文地址:https://www.cnblogs.com/Hilda/p/2909900.html
Copyright © 2011-2022 走看看