@[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