洛谷 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;
}
posted @ 2024-04-16 16:00  MsEEi  阅读(18)  评论(0)    收藏  举报