题解
2025-08-20 10:14:27
发布于:四川
5阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int a[6][6]; // N, M <= 5,所以5x5足够
bool vis[6][6];
int dirx[4] = {0, 0, -1, 1};
int diry[4] = {-1, 1, 0, 0};
int n, m, t, sx, sy, fx, fy, cnt;
void dfs(int x, int y) {
if (x == fx && y == fy) {
cnt++;
return;
}
for (int i = 0; i < 4; i++) {
int dx = x + dirx[i];
int dy = y + diry[i];
if (dx >= 1 && dx <= n && dy >= 1 && dy <= m &&
a[dx][dy] != 1 && !vis[dx][dy]) {
vis[dx][dy] = true;
dfs(dx, dy);
vis[dx][dy] = false;
}
}
}
int main() {
cin >> n >> m >> t;
cin >> sx >> sy >> fx >> fy;
// 初始化地图
for (int i = 1; i <= t; i++) {
int x, y;
cin >> x >> y;
a[x][y] = 1;
}
// 判断起点是否等于终点
if (sx == fx && sy == fy) {
cout << 1;
return 0;
}
// 判断起点或终点是否是障碍
if (a[sx][sy] == 1 || a[fx][fy] == 1) {
cout << 0;
return 0;
}
// 标记起点已访问
vis[sx][sy] = true;
dfs(sx, sy);
cout << cnt;
return 0;
}
全部评论 3
2025-08-20 来自 四川
02025-08-20 来自 四川
02025-08-20 来自 四川
0
有帮助,赞一个