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