//走迷宫的深搜
#include<iostream>
using namespace std;
const int N = 10;
const int dx[4] = { 0,1,0,-1 };
const int dy[4] = { 1,0,-1,0 }; //同样是先定义向量
int n, m, t;
int ans;
int g[N][N]; //存图
int vis[N][N]; //存点是否走过
int sx,tx,sy,ty, x3, y3; //入点,出点,障碍点
void dfs(int ix, int iy) { //深搜
vis[ix][iy] = true; //把入点先标记上
if (ix == tx && iy == ty) { //当此层的入点已经是出点了
ans++; //数量增加
return; //回归上一层
}
for (int i = 0; i < 4; i++) {
int x = ix + dx[i], y = iy + dy[i]; //同样的向量移动
if (vis[x][y] == false && g[x][y] == 1) { //如果此点没有走过且此点不是障碍
vis[x][y] = true; //标记此点
dfs(x, y); //下一层走此点
vis[x][y] = false; //回溯
}
}
}
int main() {
cin >> n >> m >> t;
cin >> sx >> sy >> tx >> ty;
for (int i = 1; i <= n; i++) { //先把图全部存为1
for (int j = 1; j <= m; j++) {
g[i][j] = 1;
}
}
while (t--) {
cin >> x3 >> y3;
g[x3][y3] = 0; //把障碍标为0
}
dfs(sx, sy);
cout << ans;
return 0;
}
洛谷-P1605-迷宫
于 2023-12-27 22:22:45 首次发布