洛谷 P1605. 迷宫 --- dfs
感觉这道题就是一个很明显的例子 问你有多少种走到终点的方案
问你方案数 你就要用dfs 要是问你走到终点的最短路径是多少 那你就得用bfs
#include <bits/stdc++.h>
using namespace std;
const int N = 10;
int n, m, k;
int sx, sy, fx, fy;
int dx[4] = {0, 0, 1, -1}, dy[4] = {1, -1, 0, 0};
bool g[N][N]; //存障碍点
bool st[N][N];
int cnt;
void dfs(int x, int y)
{
if (x == fx && y == fy)
{
cnt ++ ;
return; //返回 继续搜索
}
for (int i = 0; i < 4; i ++ )
{
int l = x + dx[i], r = y + dy[i];
if (!st[l][r] && l > 0 && l <= n && r > 0 && r <= m && !g[l][r])
{
st[l][r] = true;
dfs(l, r);
st[l][r] = false; //恢复现场
}
}
}
void solve()
{
scanf("%d%d%d", &n, &m, &k);
scanf("%d%d%d%d", &sx, &sy, &fx, &fy);
for (int i = 1; i <= k; i ++ )
{
int bx, by;
scanf("%d%d", &bx, &by);
g[bx][by] = true;
}
st[sx][sy] = true; //第一次没有全部ac就是因为没有将起点初始化为true 起点是必走过的
dfs(sx, sy);
printf("%d\n", cnt);
return;
}
int main()
{
solve();
return 0;
}