```
#include<iostream>
using namespace std;
const int N = 55, M = 1010;
//S N E W
const int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1};
int n, m, dir[M];
bool st[N][N][M];
char g[N][N], ch[10];
void dfs(int x, int y, int u, int depth) {
if (u == depth + 1) {
g[x][y] = '*';
return;
}
if (st[x][y][u]) return;
st[x][y][u] = true;
int d = dir[u - 1];
int a = x + dx[d], b = y + dy[d];
while ((a >= 0 && a < n && b >= 0 && b < m) && g[a][b] != 'X') {
dfs(a, b, u + 1, depth);
a += dx[d], b += dy[d];
}
}
int main(void) {
cin >> n >> m;
for (int i = 0; i < n; i ++) scanf("%s", g[i]);
int x, y;
for (int i = 0; i < n; i ++)
for (int j = 0; j < m; j ++) {
if (g[i][j] == '*') {
x = i, y = j;
break;
}
}
int q;
cin >> q;
for (int i = 0; i < q; i ++) {
scanf("%s", ch);
if (ch[0] == 'S') dir[i] = 0;
else if (ch[0] == 'N') dir[i] = 1;
else if (ch[0] == 'E') dir[i] = 2;
else dir[i] = 3;
}
g[x][y] = '.';
dfs(x, y, 1, q);
for (int i = 0; i < n; i ++) printf("%s\n", g[i]);
return 0;
}
```
by Kingah @ 2023-09-05 00:31:57
@[Deity_Satan](/user/816528) vis去重应该要三维,我这里还用了迭代加深
by Kingah @ 2023-09-05 00:33:09
@[Kingah](/user/971808) 终于知道了,感谢
by Deity_Satan @ 2023-09-06 18:59:10