迷宫DFS问题(二维vector, pair,模板题)

这篇具有很好参考价值的文章主要介绍了迷宫DFS问题(二维vector, pair,模板题)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HJ43 迷宫问题文章来源地址https://www.toymoban.com/news/detail-660272.html

#include <bits/stdc++.h>
using namespace std;

void dfs(vector<vector<int>>& map, vector<pair<int,int>>& paths, int x, int y){
    //记录走过,更新路径
    // cout << x << y << endl;
    map[x][y] = 1;
    pair<int, int> point(x, y);
    paths.push_back(point);

    int n = map.size()-1;
    int m = map[0].size()-1;
    if(x == n && y == m){
        //输出paths
        for(auto &x : paths){
            cout << "(" << x.first << "," << x.second << ")" <<endl;
        }
        return;
    }
    
    //上下左右搜索, 注意越界的判断要在前面
    if(x - 1 >=0 && map[x - 1][y] == 0){
        dfs(map, paths, x-1, y);
    }
    if(x + 1 <= n && map[x + 1][y] == 0){
        dfs(map, paths, x+1, y);
    }
    if(y - 1 >=0 && map[x][y-1] == 0){
        dfs(map, paths, x, y-1);
    }
    if(y + 1 <= m && map[x][y+1] == 0){
        dfs(map, paths, x, y + 1);
    }
    paths.pop_back();
    map[x][y] = 0;

}


int main() {
    int n, m;
    cin >> n >> m;
    // cout << a << b << endl;
    vector<vector<int>> map(n, vector<int>(m));
    // vector<vector<int>> walked(a, vector<int>(b, 0));
    for(int i = 0; i < map.size(); i++){
        for(int j = 0; j < map[i].size(); j++){
            cin >> map[i][j];
        }
    }
    //bfs
    vector<pair<int, int>> paths;
    // vector<pair<int, int>> res;
    dfs(map, paths, 0, 0);
}
// 64 位输出请用 printf("%lld")

到了这里,关于迷宫DFS问题(二维vector, pair,模板题)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • BFS算法(宽度优先搜索)超强解析 BFS迷宫问题图文详解 DFS与BFS的区别

      前情回顾:DFS练习-迷宫(最短路径)问题详解 一波三折 图片+文字 以及你需要会的基础:手搓数据结构之队列queue C/C++语言版(BFS算法预备知识) 广度优先搜索(Breadth First Search)简称广搜或者 BFS, 是遍历图存储结构的一种算法 。 BFS的原理是 “逐层扩散” ,从起点出发

    2024年02月22日
    浏览(48)
  • DFS (深度优先搜索) 算法详解 + 模板 + 例题,这一篇就够了

    深度优先搜索算法 (Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所

    2024年02月02日
    浏览(48)
  • 蛮力算法之深度优先遍历和广度优先遍历——图的深度优先遍历和广度优先遍历,附带案例:迷宫问题及矩阵中传染性传播问题

    这两种搜索方法本质上都是基于蛮力法思路 这两种搜索方法对有向图和无向图都适用 1.1 邻接矩阵 邻接矩阵示意图: 1.2 邻接表 注意:边结点代表的是图中的边,而并非图中的结点;头结点才表示图中的结点;头结点身后所连接的为边结点 邻接表示意图:(一般默认为出边

    2024年02月05日
    浏览(66)
  • DFS(深度优先遍历、N皇后问题、2N皇后问题)

    目录 一、回溯法与深度优先搜索(DFS) 二、DFS与二叉树的前序遍历 2.1、二叉树的前序遍历 2.2、DFS 全排列  2.3、分析 三、N皇后问题 1. 回溯法: 是一种通过探索所有可能的候选解来找出所有解的算法。如果候选解被确认不是一个解的话(或者至少不是最后一个解),回溯法

    2024年03月21日
    浏览(55)
  • DFS求解迷宫问题

       下面来具体分析一下算法的具体实现 首先要进行搜索,对搜索方向的顺序规定为:右--下--左--上   按照搜索顺序从起点开始搜索,在搜索的过程中将已经搜索过的位置设为已访问,这样我们就可以得到如下图所示的一条路线。 在到达终点后要进行回溯,利用 回溯 找到其

    2024年02月11日
    浏览(43)
  • 迷宫问题-DFS-BFS

    🚀学习过算法程序设计的应该都学习过迷宫这个问题,迷宫问题主要设计的算法就是DFS-深度优先遍历和BFS-广度优先遍历。 🚀在一个二维数组中,元素为1的位置表示这个位置是墙,0表示有通路,迷宫的入口和出口都是0(否则不会有路径能出去),并且路径不唯一。例如下

    2023年04月22日
    浏览(45)
  • DFS深度优先搜索

    DFS(Depth-First Search) 深度优先搜索,是一种常用的图遍历算法,用于在图或树数据结构中遍历所有节点。 深度优先搜索从一个起始节点开始,沿着一条路径尽可能远地访问节点,直到到达不能继续前进的节点,然后返回上一层继续探索其他路径。这个过程是递归的,通过不

    2024年02月04日
    浏览(37)
  • DFS—深度优先搜索

    递归函数代码形式 1 1 2 3 5 8 13 21 34 55 89 ... 已知前两项为1,之后每一项等于前两项之和。 现输入n,请输出兔子数列的第n项。 F ( n ) = { 1 ( n = 0 ) n ∗ F ( n − 1 ) ( n 0 ) F(n)=begin{cases}1(n=0)\\\\n*F(n-1)(n0)end{cases} F ( n ) = { 1 ( n = 0 ) n ∗ F ( n − 1 ) ( n 0 ) ​ 不难分析出

    2024年02月20日
    浏览(64)
  • 深度优先搜索(DFS)算法

    目录 算法思想 时间复杂度和空间复杂度 算法实现 算法优缺点 应用领域 深度优先搜索(DFS)算法的思想是从图的某个起始顶点开始,沿着一条路径尽可能深入地访问图中的所有顶点,直到不能继续为止,然后返回并探索其他路径。具体而言,DFS算法使用栈数据结构来实现,

    2024年02月05日
    浏览(47)
  • 深度优先遍历(DFS)

    图的深度优先遍历类似于树的先根遍历(递归)。 树的先根遍历: 图的深度优先遍历 使用的逻辑结构是栈。 如果是非连通图,依旧无法遍历完所有结点。 所以,需要在遍历完一轮结点后,扫描未被标记的结点。 visited数组防止重复访问。 代码实现: 1.空间复杂度 来自函数

    2024年02月10日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包