題目:給你一個地圖,地圖上有柱子和貼片,再給你一串機器人在地圖上行走的指令;
機器人每次可以前進、左轉90度或者右轉90度,柱子和邊界不能走,問他能拾起幾個貼片。
分析:模擬。直接模擬出立即可,處理好轉向就沒什麼問題了。
說明:轉向可以打表處理。
#include <cstring>
#include <cstdio>
char maps[101][101];
char move[50005];
char L[256],R[256];
int main()
{
L['N'] = 'O';L['O'] = 'S';L['S'] = 'L';L['L'] = 'N';
R['N'] = 'L';R['L'] = 'S';R['S'] = 'O';R['O'] = 'N';
int n, m, s, x, y, f, xx, yy;
while (~scanf("%d%d%d",&n,&m,&s) && s) {
for (int i = 0; i < n; ++ i)
scanf("%s",maps[i]);
scanf("%s",move);
for (int i = 0; i < n; ++ i)
for (int j = 0; j < m; ++ j)
if (maps[i][j] != '.' && maps[i][j] != '*' && maps[i][j] != '#') {
x = i;
y = j;
f = maps[i][j];
}
int count = 0;
for (int i = 0; i < s; ++ i) {
xx = x;
yy = y;
if (move[i] == 'D')
f = R[f];
else if (move[i] == 'E')
f = L[f];
else if (move[i] == 'F') {
if (f == 'O' && y > 0 && maps[x][y-1] != '#') yy = y-1;
if (f == 'L' && y < m-1 && maps[x][y+1] != '#') yy = y+1;
if (f == 'N' && x > 0 && maps[x-1][y] != '#') xx = x-1;
if (f == 'S' && x < n-1 && maps[x+1][y] != '#') xx = x+1;
x = xx;
y = yy;
if (maps[x][y] == '*') {
maps[x][y] = '.';
count ++;
}
}
}
printf("%d\n",count);
}
return 0;
}