40分,求救,哪里错了

P1605 迷宫

1、这一段,你的 $a$ 数组应该是用来标记有没有障碍物的,因为初始的 $a_{i,j}$ 都是 $0$,所以这一段可以直接删掉: ```cpp for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { a[i][j] = 1; } } ``` 2、你 $temp$ 数组应该是标记有没有走过这个点,那么在你 $dfs$ 前,要把起点标记为走过。 ```cpp a[sx][sy] = 1; temp[sx][sy]=1; ``` 3、关于 $dfs$ 里这个判断,应该这样写: ```cpp if (tx>0&&tx<=n&&ty>0&&ty<=m&&temp[tx][ty] == 0 && a[tx][ty]==0) ``` 前四个用来看 $tx$ 和 $ty$ 是否在地图的边界内,后面判断有没有走过,以及这个点上有没有障碍物。 ------ 改完后的代码是这样,不知道还有没有其他问题: ```cpp #include<bits/stdc++.h> using namespace std; int n, m, t; int sx, sy, fx, fy, ans; int a[101][101]; bool temp[101][101]; int l, r; int tx, ty; int qx[5] = {0, 0, 1, 0, -1}; int qy[5] = {0, 1, 0, -1, 0}; void dfs(int x, int y) { if (x == fx && y == fy) { ans++; return; } else { for (int i = 1; i <= 4; i++) { tx = qx[i] + x; ty = qy[i] + y; if (tx>0&&tx<=n&&ty>0&&ty<=m&&temp[tx][ty] == 0 && a[tx][ty]==0) { temp[tx][ty] = 1; dfs(tx, ty); temp[tx][ty] = 0; } } } } int main() { //freopen("name.in","r",stdin); //freopen("name.out","w",stdout); cin >> n >> m >> t; cin >> sx >> sy >> fx >> fy; /*for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { a[i][j] = 1; } }*/ a[sx][sy] = 1; temp[sx][sy]=1; for (int i = 1; i <= t; i++) { cin >> l >> r; a[l][r] = 1; } dfs(sx, sy); cout << ans; //fclose(stdin); //fclose(stdout); return 0; } ```
by wanggk @ 2022-08-19 20:26:07


楼上正解
by 6k823 @ 2022-08-19 20:27:18


@[weichen123](/user/657500)
by wanggk @ 2022-08-19 20:31:40


@[wanggk王冠龛](/user/252664) thank you 大佬
by weichen123 @ 2022-08-19 20:35:04


@[wanggk王冠龛](/user/252664) 大佬,没对,现在50分了
by weichen123 @ 2022-08-19 20:38:47


@[weichen123](/user/657500) 代码贴出来看一下?
by 6k823 @ 2022-08-19 20:42:03


@[weichen123](/user/657500) $tx$ 和 $ty$ 应该在每次循环的时候定义,而非是全局变量 : ```cpp int tx = qx[i] + x; int ty = qy[i] + y; ```
by _Vix_ @ 2022-08-19 21:02:18


@[Zheng07](/user/482965) 求教大佬,请问有什么区别吗?
by wanggk @ 2022-08-19 21:15:46


@[wanggk王冠龛](/user/252664) 定义为全局变量的话,在 $dfs$ 内部回溯时 $temp[tx][ty]$ 的 $tx$ 和 $ty$ 已经被修改过了,所以要不停创建局部变量保存状态,防止后面 $dfs$ 修改之前保存的状态。
by _Vix_ @ 2022-08-19 21:24:15


@[Zheng07](/user/482965) %%% 学到了!以前习惯定义在里面,但是没想过为什么。
by wanggk @ 2022-08-19 21:31:31


|