zoukankan      html  css  js  c++  java
  • poj 2632 Crashing Robots(模拟)

    题意分析:

          对机器人的移动作可能结果;

           1:超出矩阵范围

           2:和其他机器人相撞

           3:OK

         对于每次命令进行模拟和判断,自己写的太乱了代码 200+ ;

         第一次做的忘了对相撞的加以判断,WA ,看了discussion 里的数据

         才找到错误;细心!!!

    #include<stdio.h>
    #include<string.h>
    int map[105][105];
    struct node
    {
    int x,y;
    char dir;
    }grah[105];
    int main()
    {
    int t;scanf("%d",&t);
    while(t--)
    {
    int x,y;
    memset(map,0,sizeof(map));
    scanf("%d%d",&x,&y);
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {

    scanf("%d%d %c",&grah[i].x,&grah[i].y,&grah[i].dir);
    map[grah[i].x][grah[i].y]=1;
    }
    int flag=0;
    for(int i=1;i<=m;i++)
    {
    char str1;int xl,yl;
    scanf("%d %c %d",&xl,&str1,&yl);
    if(grah[xl].dir=='E'&&!flag)
    {
    if(str1=='L')
    {
    yl%=4;
    if(yl==1)
    grah[xl].dir='N';
    else if(yl==2)
    grah[xl].dir='W';
    else if(yl==3)
    {
    grah[xl].dir='S';
    }

    }
    else if(str1=='R'&&!flag)
    {
    yl%=4;
    if(yl==1)
    grah[xl].dir='S';
    else if(yl==2)
    grah[xl].dir='W';
    else if(yl==3)
    {
    grah[xl].dir='N';
    }
    }
    else if(!flag)
    {
    map[grah[xl].x][grah[xl].y]=0;
    // grah[xl].x+=yl;
    for(int j=1;j<=yl&&!flag;j++)
    {
    grah[xl].x++;
    if(map[grah[xl].x][grah[xl].y])
    {
    for(int k=1;k<=n;k++)
    {
    if(k==xl) continue;
    if(grah[k].x==grah[xl].x&&grah[k].y==grah[xl].y)
    {
    flag=1;
    printf("Robot %d crashes into robot %d\n",xl,k);
    break;
    }

    }
    }
    if(grah[xl].x<1||grah[xl].x>x||grah[xl].y<1||grah[xl].y>y)
    {
    break;
    }

    }
    if(grah[xl].x<1||grah[xl].x>x||grah[xl].y<1||grah[xl].y>y);
    else map[grah[xl].x][grah[xl].y]=1;
    }
    }
    else if(grah[xl].dir=='W'&&!flag)
    {

    if(str1=='L'&&!flag)
    {
    yl%=4;
    if(yl==1)
    grah[xl].dir='S';
    else if(yl==2)
    grah[xl].dir='E';
    else if(yl==3)
    {
    grah[xl].dir='N';
    }
    }
    else if(str1=='R')
    {
    yl%=4;
    if(yl==1)
    grah[xl].dir='N';
    else if(yl==2)
    grah[xl].dir='E';
    else if(yl==3)
    {
    grah[xl].dir='S';
    }
    }
    else if(!flag)
    {
    map[grah[xl].x][grah[xl].y]=0;
    // grah[xl].x-=yl;
    for(int j=1;j<=yl&&!flag;j++)
    {
    grah[xl].x--;
    if(map[grah[xl].x][grah[xl].y])
    {
    for(int k=1;k<=n;k++)
    {
    if(k==xl) continue;
    if(grah[k].x==grah[xl].x&&grah[k].y==grah[xl].y)
    {
    flag=1;
    printf("Robot %d crashes into robot %d\n",xl,k);
    break;
    }

    }
    }
    if(grah[xl].x<1||grah[xl].x>x||grah[xl].y<1||grah[xl].y>y)
    {
    break;
    }

    }
    if(grah[xl].x<1||grah[xl].x>x||grah[xl].y<1||grah[xl].y>y);
    else map[grah[xl].x][grah[xl].y]=1;
    }
    }
    else if(grah[xl].dir=='N'&&!flag)
    {
    if(str1=='L')
    {
    yl%=4;
    if(yl==1)
    grah[xl].dir='W';
    else if(yl==2)
    grah[xl].dir='S';
    else if(yl==3)
    {
    grah[xl].dir='E';
    }
    }
    else if(str1=='R')
    {
    yl%=4;
    if(yl==1)
    grah[xl].dir='E';
    else if(yl==2)
    grah[xl].dir='S';
    else if(yl==3)
    {
    grah[xl].dir='W';
    }
    }
    else
    {
    map[grah[xl].x][grah[xl].y]=0;
    //grah[xl].y+=yl;
    for(int j=1;j<=yl&&!flag;j++)
    {
    grah[xl].y++;
    if(map[grah[xl].x][grah[xl].y])
    {
    for(int k=1;k<=n;k++)
    {
    if(k==xl) continue;
    if(grah[k].x==grah[xl].x&&grah[k].y==grah[xl].y)
    {
    flag=1;
    printf("Robot %d crashes into robot %d\n",xl,k);
    break;
    }

    }
    }
    if(grah[xl].x<1||grah[xl].x>x||grah[xl].y<1||grah[xl].y>y)
    {
    break;
    }
    }
    if(grah[xl].x<1||grah[xl].x>x||grah[xl].y<1||grah[xl].y>y);
    else map[grah[xl].x][grah[xl].y]=1;
    }
    }
    else if(!flag)
    {
    if(str1=='L')
    {
    yl%=4;
    if(yl==1)
    grah[xl].dir='E';
    else if(yl==2)
    grah[xl].dir='N';
    else if(yl==3)
    {
    grah[xl].dir='W';
    }
    }
    else if(str1=='R')
    {
    yl%=4;
    if(yl==1)
    grah[xl].dir='W';
    else if(yl==2)
    grah[xl].dir='N';
    else if(yl==3)
    {
    grah[xl].dir='E';
    }
    }
    else if(!flag)
    {
    map[grah[xl].x][grah[xl].y]=0;
    // grah[xl].y-=yl;
    for(int j=1;j<=yl&&!flag;j++)
    {
    grah[xl].y--;
    if(map[grah[xl].x][grah[xl].y])
    {
    for(int k=1;k<=n;k++)
    {
    if(k==xl) continue;
    if(grah[k].x==grah[xl].x&&grah[k].y==grah[xl].y)
    {
    flag=1;
    printf("Robot %d crashes into robot %d\n",xl,k);
    break;
    }

    }
    }
    if(grah[xl].x<1||grah[xl].x>x||grah[xl].y<1||grah[xl].y>y)
    {
    break;
    }
    }
    if(grah[xl].x<1||grah[xl].x>x||grah[xl].y<1||grah[xl].y>y) ;
    else map[grah[xl].x][grah[xl].y]=1;
    }
    }
    if(flag) continue;
    if(grah[xl].x<1||grah[xl].x>x||grah[xl].y<1||grah[xl].y>y)
    {
    printf("Robot %d crashes into the wall\n",xl);
    flag=1;
    }
    }
    if(!flag) puts("OK");
    }
    }



    Just a little, maybe change the world
  • 相关阅读:
    重启Linux机器异常的解决方法
    SSH连接Linux服务器异常
    H5本地存储
    Spring MVC概述
    Linux下oracle开机自启动
    [ASP.NET MVC]@Partial 和@RenderPartial的区别
    [ASP.NET MVC]EntityFramework离线部署
    [ASP.NET MVC]@RenderSection,@RenderBody(),@RenderPage
    [ASP.NET MVC]@Html.AntiForgeryToken() 防止CSRF攻击
    [ASP.NET MVC]@Scripts.Render、@Styles.Render的使用
  • 原文地址:https://www.cnblogs.com/skyming/p/2385779.html
Copyright © 2011-2022 走看看