走迷宫(dfs)

走迷宫
 

描述

 

给一个 n 行 m 列的 2 维的迷宫,‘S’表示迷宫的起点,‘T’表示迷宫的终点,’#‘表示不能通过的点,’.’ 表示可以通过的点。你需要从’S’出发走到’T’,每次只能上下左右走动,并且只能进入能通过的点,每个点只能通过一次。现在要求你求出有多少种通过迷宫的的方案。

 

输入描述

 

第一行输入 n, m (1≤n,m≤10) 表示迷宫大小。

接下来输入 n 行字符串表示迷宫。

 

输出描述

 

输入通过迷宫的方法数。

 

用例输入 1 

2 3
S.#
..T

用例输出 1 

2

用例输入 2 

3 3
S..
.#.
..T

用例输出 2 

2

复制代码
#include <iostream>
using namespace std;
int head[4][2] = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};//朝向
char p[11][11];
int visit[11][11] = {0};//搜索记号
int ans = 0;
int x, y;
int m, n;
void dfs(int x, int y)
{
    if (p[x][y] == 'T')//到达目的地
    {
        ans++;
        return;
    }
    visit[x][y] = 1;//走过此地的记号
    int tx, ty;
    for (int i = 0; i < 4; i++)
    {
        tx = x + head[i][0];
        ty = y + head[i][1];//四向搜索
        if (tx >= 0 && ty >= 0 && p[tx][ty] != '#' && visit[tx][ty] == 0 && tx < n && ty < m)
        {
            dfs(tx, ty);//此处递归时前面的路都已标记
        }
    }
    visit[x][y] = 0;//此处递归返回后,保证其它路线畅通
}
int main()
{
    cin >> n >> m;
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
        {
            cin >> p[i][j];
            if (p[i][j] == 'S')//找到入口
            {
                x = i;
                y = j;
            }
        }
    dfs(x, y);
    cout << ans;
}
复制代码

感觉自己还是不太懂这类题😔,下面放一个大佬的整理

复制代码
int xx[4] = {-1,0,1,0},yy[4] = {0,1,0,-1}; // 上 右 下 左

void dfs(int x,int y){
    if(x,y是终点){
        count ++;  // 计数,返回输出等等
        return ;
    }
    a[x][y] = '#'; //标记(x,y)已经访问了
    //接下来上下左右循环深搜
    for(i = 0;i < 4;i ++){//这种遍历的格式很多,个人喜欢这种
        int tx = x + xx[i];
        int ty = y + yy[i];
        if(){// tx 和 ty 都没有访问过且满足一写必要的条件,则继续往下深搜
            dfs(tx,ty);
        } 
    }
    a[x][y] = '.';  // 解除标记,因为已经到底了,然后从底部依次往上解除标记
}

int main(){
    //第一步 输入一些数 数组的值
    //第二步 找到起点终点,调用dfs函数
    //第三步 根据所求的值,设置条件语句等进行判断输出
    return 0;
}
//(6条消息) 蓝桥杯dfs模板题--走迷宫整理与反思_码卡巴卡i的博客-CSDN博客
复制代码

 

posted @   渣渣纸  阅读(261)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示