@[BHPM](/user/726139)
两个问题:1.
```cpp
if (fx < 1 || fy > N || fy < 1 || fy > M) continue;
```
fx写成了fy~~我也经常这样~~
2.回溯没写对
帮你改了改
```cpp
void dfs(int x, int y) {
if (x == ex && y == ey) {
ans++;
return ;
}
vis[x][y] = 0;
for (int i = 0; i < 4; i++) {
int fx = x + dir[i][0];
int fy = y + dir[i][1];
if (fx < 1 || fx > N || fy < 1 || fy > M || vis[fx][fy]) continue;
dfs(fx, fy);
}
vis[x][y] = 0;
```
这样就可以了
by Brilliant11001 @ 2023-07-21 08:48:07
@[Brilliant11001](/user/602372) $\textbf{thanks!}$
by 残阳如血 @ 2023-07-21 10:01:00
@[Brilliant11001](/user/602372)
```cpp
#include <bits/stdc++.h>
using namespace std;
const int dir[][2] = {0, 1, 1, 0, 0, -1, -1, 0};
struct point { int x, y; };
int N, M, T, ans, sx, sy, ex, ey;
int vis[10][10];
void dfs(point cur) {
if (cur.x == ex && cur.y == ey) {
ans++;
return ;
}
vis[cur.x][cur.y] = 1;
for (int i = 0; i < 4; i++) {
int fx = cur.x + dir[i][0];
int fy = cur.y + dir[i][1];
if (fx < 1 || fx > N || fy < 1 || fy > M || vis[fx][fy]) continue;
dfs({fx, fy});
}
vis[cur.x][cur.y] = 0;
return ;
}
int main() {
cin >> N >> M >> T >> sx >> sy >> ex >> ey;
while (T--) {
int x, y;
cin >> x >> y;
vis[x][y] = -1;
}
if (vis[N][M] == -1) {
cout << 0;
return 0;
}
dfs({sx, sy});
cout << ans;
return 0;
}
```
测试点⑩$\rm WA$了
by 残阳如血 @ 2023-07-21 10:05:55
@[BHPM](/user/726139) 对不起哈,刚刚那个代码打错了,第一个应该是vis[x][y] = 1;
然后现在的问题是这一行
```cpp
if (vis[N][M] == -1)
```
应该是
```cpp
if (vis[ex][ey] == -1)
```
是要判断终点处有没有障碍嘛
by Brilliant11001 @ 2023-07-21 10:51:22
@[Brilliant11001](/user/602372) 哦,没注意到小细节,谢谢!
by 残阳如血 @ 2023-07-21 11:04:08