PKU 2632 Crashing Robots 模拟
2010-06-05 00:14
483 查看
题意简述:在一个b*a的矩形框内,有n个机器人,告诉其初始位置及方向。
现有m条指令,每条指令可能是转向或者向前走一步。
试判断有没有冲突或者撞墙的情况。
解题思路:模拟
题目链接:http://162.105.81.212/JudgeOnline/problem?id=2632
现有m条指令,每条指令可能是转向或者向前走一步。
试判断有没有冲突或者撞墙的情况。
解题思路:模拟
题目链接:http://162.105.81.212/JudgeOnline/problem?id=2632
//模拟 #include<iostream> using namespace std; struct robot{ int x,y; //x:机器人所在行; y:所在列 int pr; //当前方向 }rob[102]; int map[102][102]; int a,b; //a:地图的列 b:行 int rob1,rob2; //记录二个机器人的序号 int pree(char i)//求解方向 { switch(i) { case 'E': return 0; case 'S': return 1; case 'W': return 2; case 'N': return 3; } } bool move(int num,int pr,int cc) { int x=0,y=0,bu=0; map[rob[num].x][rob[num].y]=0; if(pr=='F')//如果是向前移动 { switch(rob[num].pr) { case 0:rob[num].y+=cc;x=rob[num].x;bu=cc;break; case 1:rob[num].x+=cc;y=rob[num].y;bu=cc;break; case 2:rob[num].y-=cc;x=rob[num].x;bu=-cc;break; case 3:rob[num].x-=cc;y=rob[num].y;bu=-cc;break; } if(x!=0)//行不变 { if(bu<0)//向西移动 { //i初始值表示:rob【num】的此次未移动前的列标减 1 //i的终点是1 或rob【num】.y(移动后的位置) //i 的值减减知道遇到map中的rob(机器人) 就return false; for(int i=rob[num].y-bu-1;i>=1&&i>=rob[num].y;i--) if(map[x][i]!=0) { rob1=num; rob2=map[x][i];return false;} if(rob[num].y<1) {rob1=num;return false;} } else if(bu>0)//向东移动 { for(int i=rob[num].y-bu+1;i<=a&&i<=rob[num].y;i++) if(map[x][i]!=0) { rob1=num; rob2=map[x][i];return false;} if(rob[num].y>a) {rob1=num;return false;} } } else//列不变 { if(bu<0) { for(int i=rob[num].x-bu-1;i>=1&&i>=rob[num].x;i--) if(map[i][y]!=0) { rob1=num; rob2=map[i][y];return false;} if(rob[num].x<1) {rob1=num;return false;} } else if(bu>0) { for(int i=rob[num].x-bu+1;i<=b&&i<=rob[num].x;i++) if(map[i][y]!=0) { rob1=num; rob2=map[i][y];return false;} if(rob[num].x>b) {rob1=num;return false;} } } map[rob[num].x][rob[num].y]=num; } else { cc%=4; if(pr=='L') { rob[num].pr=(rob[num].pr-cc+4)%4; } else { rob[num].pr=(rob[num].pr+cc)%4;} } return true; } int main() { int t,num,cc;; int n,m,x,y; bool flag; char pr; cin>>t; while(t--) { cin>>a>>b; cin>>n>>m; memset(map,0,sizeof(map)); for(int i=1;i<=n;i++) { cin>>y>>x>>pr; map[b-x+1][y]=i; rob[i].pr=pree(pr); rob[i].x=b-x+1;rob[i].y=y; } rob1=rob2=0; flag=true;//rob1和rob2值付 0 for(int i=1;i<=m;i++) { cin>>num>>pr>>cc; if(!flag) continue; flag=move(num,pr,cc); } if(flag) cout<<"OK"<<endl; else if(rob2==0) //rob2==0表示没有撞到rob(机器人)。 cout<<"Robot "<<rob1<<" crashes into the wall"<<endl; else cout<<"Robot "<<rob1<<" crashes into robot "<<rob2<<endl; } return 0; }
相关文章推荐
- POJ 2632 Crashing Robots(较为繁琐的模拟)
- poj 2632 Crashing Robots(模拟)
- poj_2632 Crashing Robots(简单模拟)
- POJ2632 Crashing Robots(模拟)
- poj 2632 Crashing Robots, 模拟
- POJ 2632 Crashing Robots (模拟)
- POJ 2632:Crashing Robots:模拟试手
- poj 2632 Crashing Robots——模拟
- poj 2632 Crashing Robots_模拟
- POJ 2632 Crashing Robots (坑爹的模拟题)
- POJ2632--Crashing Robots--模拟
- poj 2632 Crashing Robots(模拟)
- poj2632 Crashing Robots 模拟
- poj_2632_Crashing Robots(模拟)
- poj 2632 Crashing Robots_模拟
- poj-2632-- Crashing Robots -- 模拟法
- POJ 2632 Crashing Robots 模拟题目
- poj 2632 Crashing Robots 模拟
- POJ 2632-Crashing Robots(模拟)
- POJ 2632 Crashing Robots(模拟)