题目链接:
https://www.dotcpp.com/oj/problem1429.html
题目描述:
即按照下面的蚂蚁移动规则,输出蚂蚁在指定步数后的位置。
移动规则:
若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;
若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。
然后输入输出的数据说明:
输入:
输入数据的第一行是 m n 两个整数(3 < m, n < 100),表示正方形格子的行数和列数。
接下来是 m 行数据。
每行数据为 n 个被空格分开的数字。0 表示白格,1 表示黑格。
接下来是一行数据:x y s k, 其中x y为整数,表示蚂蚁所在行号和列号(行号从上到下增长,列号从左到右增长,都是从0开始编号)。s 是一个大写字母,表示蚂蚁头的朝向,我们约定:上下左右分别用:UDLR表示。k 表示蚂蚁走的步数。输出:
输出数据为一个空格分开的整数 p q, 分别表示蚂蚁在k步后,所处格子的行号和列号。
思路:
就是按照题目指定的移动规则写就可以了。详情看ac代码咯。
ac代码:
#include <bits/stdc++.h>
using namespace std;
int m,n;
int M[105][105];
//void printM()
//{
// cout<<"打印的地图"<<endl;
// for(int i = 0;i < m;i++){
// for(int j = 0;j < n;j++){
// cout<<M[i][j];
// }
// cout<<endl;}
//}
char changeDir(char c,int a){//c代表当前的方向,a代表当前所处的底面是黑格还是白格
if(a==0){
if(c=='U'){
return 'L';
}
else if(c=='D'){
return 'R';
}
else if(c=='L'){
return 'D';
}else{
return 'U';
}
}else{
if(c=='U'){
return 'R';
}else if(c=='D'){
return 'L';
}else if(c=='L'){
return 'U';
}else{
return 'D';
}
}
}
int changeColor(int a){
return (a==0)?1:0;
}
int main(){
int start_x,start_y;
char dir;
int k;
int move[4][2] = {{0,-1},{1,0},{0,1},{-1,0}};//左下右上
cin>>m>>n;
for(int i = 0;i < m;i++){
for(int j = 0;j < n;j++){
cin>>M[i][j];
}
}
cin>>start_x>>start_y>>dir>>k;
int dx,dy;
dx = start_x;
dy = start_y;
// int next_x,next;//记录蚂蚁下一步的位置
for(int i = 0;i < k;i++){
dir = changeDir(dir,M[dx][dy]);
M[dx][dy] = changeColor(M[dx][dy]);
if(dir == 'U'){
dx = dx + move[3][0];
dy = dy + move[3][1];
}else if(dir == 'D'){
dx = dx + move[1][0];
dy = dy + move[1][1];
}else if(dir == 'L'){
dx = dx + move[0][0];
dy = dy + move[0][1];
}else if(dir == 'R'){
dx = dx + move[2][0];
dy = dy + move[2][1];
}
// printM();
}
cout<<dx<<" "<<dy<<endl;
return 0;
}