七彩求助,玄关

P1605 迷宫

@[BHPM](/user/726139) 两个问题:1. ```cpp if (fx < 1 || fy > N || fy < 1 || fy > M) continue; ``` fx写成了fy~~我也经常这样~~ 2.回溯没写对 帮你改了改 ```cpp void dfs(int x, int y) { if (x == ex && y == ey) { ans++; return ; } vis[x][y] = 0; for (int i = 0; i < 4; i++) { int fx = x + dir[i][0]; int fy = y + dir[i][1]; if (fx < 1 || fx > N || fy < 1 || fy > M || vis[fx][fy]) continue; dfs(fx, fy); } vis[x][y] = 0; ``` 这样就可以了
by Brilliant11001 @ 2023-07-21 08:48:07


@[Brilliant11001](/user/602372) $\textbf{thanks!}$
by 残阳如血 @ 2023-07-21 10:01:00


@[Brilliant11001](/user/602372) ```cpp #include <bits/stdc++.h> using namespace std; const int dir[][2] = {0, 1, 1, 0, 0, -1, -1, 0}; struct point { int x, y; }; int N, M, T, ans, sx, sy, ex, ey; int vis[10][10]; void dfs(point cur) { if (cur.x == ex && cur.y == ey) { ans++; return ; } vis[cur.x][cur.y] = 1; for (int i = 0; i < 4; i++) { int fx = cur.x + dir[i][0]; int fy = cur.y + dir[i][1]; if (fx < 1 || fx > N || fy < 1 || fy > M || vis[fx][fy]) continue; dfs({fx, fy}); } vis[cur.x][cur.y] = 0; return ; } int main() { cin >> N >> M >> T >> sx >> sy >> ex >> ey; while (T--) { int x, y; cin >> x >> y; vis[x][y] = -1; } if (vis[N][M] == -1) { cout << 0; return 0; } dfs({sx, sy}); cout << ans; return 0; } ``` 测试点⑩$\rm WA$了
by 残阳如血 @ 2023-07-21 10:05:55


@[BHPM](/user/726139) 对不起哈,刚刚那个代码打错了,第一个应该是vis[x][y] = 1; 然后现在的问题是这一行 ```cpp if (vis[N][M] == -1) ``` 应该是 ```cpp if (vis[ex][ey] == -1) ``` 是要判断终点处有没有障碍嘛
by Brilliant11001 @ 2023-07-21 10:51:22


@[Brilliant11001](/user/602372) 哦,没注意到小细节,谢谢!
by 残阳如血 @ 2023-07-21 11:04:08


|