80分WA,求指教

P1605 迷宫

@[OoJacksonoO](/user/1217265) 把上面代码中的 `sign[][]` 开成 $7 × 7$ 就能A了 (其实从逻辑上来讲 `mapp[][]` 也应该开成 $7 × 7$,其实也就是 $5 + 2$,但是实测不改也能A) 这是因为你既没有做越界检测,数组也开得不够大,那就有可能越界访问到内存中随机值 那么为什么改成 `int` 就可以了呢?大概是因为 `bool` 和 `int` 占用的内存大小不一样,所以分配的地址也不一样,与后者分配的地址前后相邻的地址所存储的值可能恰好是 $0$,所以越界了也能A,而前者就没那么幸运了 以我的认知我只能这么解释了,具体的什么洛谷评测环境啥的我也不想细研究,因为对于这题而言只要代码逻辑写得对就不会出现这样的问题
by 杜都督 @ 2024-03-08 00:57:26


@[OoJacksonoO](/user/1217265) 给你贴一份我的代码,被这种问题坑过之后无论数据范围有多小我都是直接上来就 $+ 10$ 的 ```cpp #include <iostream> using namespace std; const int MAX_N = 5 + 10; int N, M, FX, FY; int mp[MAX_N][MAX_N] = {0}; int dfs(int x, int y) { if (x < 1 || N < x || y < 1 || M < y || mp[x][y] != 0) { return 0; } if (x == FX && y == FY) { return 1; } int ans = 0; for (int i = -1; i <= 1; ++i) { for (int j = -1; j <= 1; ++j) { if (i == j || i * j != 0) { continue; } mp[x][y] = 2; ans += dfs(x + i, y + j); mp[x][y] = 0; } } return ans; } int main() { int T, SX, SY; cin >> N >> M >> T >> SX >> SY >> FX >> FY; for (int i = 0; i < T; ++i) { int x, y; cin >> x >> y; mp[x][y] = 1; } cout << dfs(SX, SY) << endl; return 0; } ```
by 杜都督 @ 2024-03-08 01:08:25


@[杜都督](/user/39279) 好像稍微懂了一点qwq
by OoJacksonoO @ 2024-03-08 18:19:05


|