过不了样例

P1123 取数游戏

@[Channel_09](/user/787888) 考虑一件事: 有以下矩阵 ``` 67 75 63 10 29 29 92 14 21 68 71 56 8 67 91 25 ``` 当选择第1行第1列的`67`和第3行第2列的`68`时,在回溯掉`68`时: ```cpp for (int i = 0;i < 8;++i) { vis[x + dx[i]][y + dy[i]] = false; } ``` 这串代码会把原先第一次选取时的标记去掉 原先的`vis`数组是这样的: ``` 1 1 0 0 1 1 1 0 1 1 1 0 1 1 1 0 ``` 正确的去掉标记: ``` 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 ``` 您代码去掉标记后: ``` 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ``` 导致会多选数 改成下面的就好了: ```cpp if (!vis[x][y]) { ans += a[x][y]; for (int i = 0; i < 8; ++i) { vis[x + dx[i]][y + dy[i]] ++; } dfs(x, y + 1); ans -= a[x][y]; for (int i = 0; i < 8; ++i) { vis[x + dx[i]][y + dy[i]] --; } } ```
by jubingkun @ 2023-08-25 11:36:50


@[jubingkun](/user/945545) 这样吗,但是我没过样例的时候看过题解,就是上面这样的,我还疑惑++是不是true,--是不是false,谢谢大佬
by Channel_09 @ 2023-08-27 19:11:53


@[jubingkun](/user/945545) 确实很有收获
by YTUGGBOY @ 2023-10-24 21:38:42


|