一道模拟题,按照题目要求走k步,若蚂蚁在黑格,右转90度,将该格改为白格,并向前移一格;若蚂蚁在白格,左转90度,将该格改为黑格,并向前移一格。
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<math.h>
#include<set>
#include<string>
using namespace std;
//ch为当前方向,direction决定向左还是向右转,返回转向后的方向
char turnDirection(char ch,int direction)
{
//direction=1右转,direction=0左转
if (ch == 'U')
{
if (direction == 1)
{
return 'R';
}
else
{
return 'L';
}
}
if (ch == 'D')
{
if (direction == 1)
{
return 'L';
}
else
{
return 'R';
}
}
if (ch == 'L')
{
if (direction == 1)
{
return 'U';
}
else
{
return 'D';
}
}
if (ch == 'R')
{
if (direction == 1)
{
return 'D';
}
else
{
return 'U';
}
}
}
int main()
{
int n, m;
cin >> m >> n;
vector<vector<int> >grid(m, vector<int>(n));
for (int i = 0; i < m;i++)
{
for (int j = 0; j < n; j++)
{
cin >> grid[i][j];
}
}
int x, y;
cin >> x >> y;
char ch;
cin >> ch;
int k;
cin >> k;
//前面的都是从控制台输入数据
//ch记录当前的朝向,k记录模拟的剩余次数;x,y为当前所在的坐标
while (k > 0)
{
if (grid[x][y] == 0)
{
//白色格子
char direction = turnDirection(ch, 0);
ch = direction;
grid[x][y] = 1;
if (direction == 'U')
{
x--;
}
else if (direction == 'D')
{
x++;
}
else if (direction == 'L')
{
y--;
}
else if(direction=='R')
{
y++;
}
}
else
{
//黑色格子
char direction = turnDirection(ch, 1);
ch = direction;
grid[x][y] = 0;
if (direction == 'U')
{
x--;
}
else if (direction == 'D')
{
x++;
}
else if (direction == 'L')
{
y--;
}
else if (direction == 'R')
{
y++;
}
}
k--;
}
cout << x << " " << y ;
return 0;
}