卧槽,模拟法到底是什么啊,不会就是根据input一个个往前走,然后碰到符合条件的退出吧??!
这道机器人就是这么做啊?!
好吧,就是按着它说的一步步写就行,然后判断,没有啥太难的,时间又充裕,放手干吧孩子!!
#include <iostream>
using namespace std;
int position_1[100][2]; //the position of the each robots
int position_2[100][2];
struct position
{
int x;
int y;
char direction;
}position[101];
int flag; //the situation of robots
int flag2;
int little_bad_robot_i,little_bad_robot_j;
void turnleft(int num)
{
if (position[num].direction=='N')
position[num].direction='W';
else if (position[num].direction=='S')
position[num].direction='E';
else if (position[num].direction=='W')
position[num].direction='S';
else if (position[num].direction=='E')
position[num].direction='N';
}
void turnright(int num)
{
if (position[num].direction=='N')
position[num].direction='E';
else if (position[num].direction=='S')
position[num].direction='W';
else if (position[num].direction=='W')
position[num].direction='N';
else if (position[num].direction=='E')
position[num].direction='S';
}
int action_the_robot(int num,char action,int repeat,int sum)
{
int i,j;
if (action == 'F') {
if (position[num].direction=='N')
{
for (i=0; i<repeat; i++) {
for (j=1; j<=sum; j++) {
if (j!=num) {
if (position[j].x==position[num].x&&position[j].y==position[num].y) {
little_bad_robot_i=num;
little_bad_robot_j=i;
flag2=1;
return 2; //2 means that two robots crush each other
}
}
}
position[num].y++;
}
}
else if (position[num].direction=='S')
{
for (i=0; i<repeat; i++) {
for (j=1; j<=sum; j++) {
if (j!=num) {
if (position[j].x==position[num].x&&position[j].y==position[num].y) {
little_bad_robot_i=num;
little_bad_robot_j=i;
flag2=1;
return 2; //2 means that two robots crush each other
}
}
}
position[num].y--;
}
}
else if (position[num].direction=='W')
{
for (i=0; i<repeat; i++) {
for (j=1; j<=sum; j++) {
if (j!=num) {
if (position[j].x==position[num].x&&position[j].y==position[num].y) {
little_bad_robot_i=num;
little_bad_robot_j=i;
flag2=1;
return 2; //2 means that two robots crush each other
}
}
}
position[num].x--;
}
}
else if (position[num].direction=='E')
{
for (i=0; i<repeat; i++) {
for (j=1; j<=sum; j++) {
if (j!=num) {
if (position[j].x==position[num].x&&position[j].y==position[num].y) {
little_bad_robot_i=num;
little_bad_robot_j=i;
flag2=1;
return 2; //2 means that two robots crush each other
}
}
}
position[num].x++;
}
}
}
if (action == 'L') {
for (i=0; i<repeat; i++)
turnleft(num);
}
if (action == 'R') {
for (i=0; i<repeat; i++)
turnright(num);
}
return 0;
}
int judge_the_position(int num,int sum,int A,int B)
{
int i;
if (position[num].x>A||position[num].x<1) {
little_bad_robot_i=num;
return 3; //3 means that robot crush the wall
}
if (position[num].y>B||position[num].y<1) {
little_bad_robot_i=num;
return 3;
}
for (i=1; i<=sum; i++) {
if (i!=num) {
if (position[i].x==position[num].x&&position[i].y==position[num].y) {
little_bad_robot_i=num;
little_bad_robot_j=i;
return 2; //2 means that two robots crush each other
}
}
}
return 1;
}
int main(int argc, const char * argv[]) {
int K,A,B; //A is the length in the EW-direction,B in the NS-direction
int N,M; //N is the started position of the robot , M is the reception
cin>>K;
while (K--) {
cin>>A>>B;
cin>>N>>M;
int i;
flag=0;
flag2=0;
for(i=1;i<=N;i++)
{
int Xi,Yi;
char direction;
cin>>Xi>>Yi;
cin>>direction;
position[i].x=Xi;
position[i].y=Yi;
position[i].direction=direction;
}
for (i=0; i<M; i++) {
int num,repeat;
char action;
cin>>num;
cin>>action;
cin>>repeat;
if (flag!=0) {
continue;
}
action_the_robot(num, action, repeat,N);
flag=judge_the_position(num,N,A,B);
if (flag==1) {
flag=0;
}
}
if (flag==3)
cout<<"Robot "<<little_bad_robot_i<<" crashes into the wall"<<endl;
if (flag==2)
cout<<"Robot "<<little_bad_robot_i<<" crashes into robot "<<little_bad_robot_j<<endl;
if (flag==0) {
cout<<"OK"<<endl;
}
}
return 0;
}
诡异全面的起变量名的风格就是我~~~
感觉机器人crash神马的萌萌哒~~~
我去我太无聊了