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
原文地址:https://www.cnblogs.com/skyming/p/2385779.html