TLE求助,dfs,有剪枝去重

P1189 SEARCH

``` #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


|