题目大意:根据题中所规定的方法,求出一定步数后,蚂蚁的位置
题目分析:本题属于常规的模拟题,就是只要根据题意把蚂蚁每步的移动方向,改变方格的颜色模拟出来即可。
我是将四个方向用整数表示,便于后期左转和右转。 规定“上”为0,“右”为1,“下”为2,“左”为3。通过这样的表示,当蚂蚁左转时,可以很方便地用(dir+3)%4来表示;同样的,当蚂蚁右转时,用(dir+1)%4来表示。
当更新蚂蚁位置时,即蚂蚁向前走一步,题中没有非法性要求,所以我们也不需要进行边界判断
代码展示:
#include <iostream>
using namespace std;
struct Point{
int x,y;
};
int translate(char c){
switch(c){
case 'U':
return 0; //向上,返回0
case 'R':
return 1; //向右,返回1
case 'D':
return 2; //向下,返回2
case 'L':
return 3; //向左,返回3
}
return -1; //处理异常情况
}
Point update(int dir,Point &p){
switch(dir){
case 0:
p.x--;
break;
case 1:
p.y++;
break;
case 2:
p.x++;
break;
case 3:
p.y--;
}
return p;
}
int main(){
int m,n,steps,dir;
char direction;
cin>>m>>n;
int map[110][110];
for(int i=0;i<m;i++){
for(int j=0;j<n;j++)
cin>>map[i][j];
}
Point ant_pos; //蚂蚁的位置
cin>>ant_pos.x>>ant_pos.y;
cin>>direction; //蚂蚁头的方向
dir = translate(direction);
cin>>steps; //蚂蚁走的总步数
for(int i=1;i<=steps;i++){
if(map[ant_pos.x][ant_pos.y]==0){ //当前所在位置为白格
dir = (dir+3)%4; //左转
map[ant_pos.x][ant_pos.y] = 1;
}
else{ //当前所在位置为黑格
dir = (dir+1)%4; //右转
map[ant_pos.x][ant_pos.y] = 0;
}
ant_pos = update(dir,ant_pos);
}
cout<<ant_pos.x<<" "<<ant_pos.y<<endl;
return 0;
}