地址:
https://www.luogu.com.cn/problem/P1605#submit
描述:
注意:
这题只有一个注意点就是要将起点也设为障碍,不然会多次经过起点
代码:
#include <iostream>
#include <cstring>
using namespace std;
int n, m, t;//n,m为行列,t障碍的数目
int sx, sy, ex, ey;
const int N = 15;
//表示迷宫能不能走
int mi[N][N];
//表示有没有走过这个点
bool st[N][N];
int ans = 0;
int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,1,0,-1 };
void dfs(int sx, int sy) {
if (sx == ex && sy == ey) {
ans++;
return;
}
for (int i = 0; i < 4; i++) {
int hang = sx + dx[i], lie = sy + dy[i];
if (hang >= 1 && hang <= n && lie >= 1 && lie <= m && mi[hang][lie] ==-1 && st[hang][lie] == false) {
st[hang][lie] = true;
dfs(hang, lie);
st[hang][lie] = false;
}
}
}
int main() {
cin >> n >> m >> t;
cin >> sx >> sy >>ex >> ey;
memset(mi, -1, sizeof mi);
//设置障碍,注意这里的起点也要设为障碍
mi[sx][sy] = 0;
for (int i = 0; i < t; i++) {
int x, y;
cin >> x >> y;
mi[x][y] = 0;
}
dfs(sx, sy);
cout << ans;
return 0;
}