当前位置: 首页 > news >正文

C++解决走迷宫问题:DFS、BFS算法应用

文章目录

  • 思路:
    • DFS
    • BFS
  • BFS和DFS的特点
    • BFS 与 DFS 的区别
    • BFS 的优点
    • BFS 时间复杂度
    • 深度优先搜索(DFS)的优点
    • 深度优先搜索(DFS)的时间复杂度
      • 解释:
      • 空间复杂度
      • 总结:


例如下面的迷宫:

// 迷宫的表示:0表示可以走,1表示障碍
vector<vector<int>> maze = {{0, 0, 1, 0, 0},{1, 0, 1, 1, 0},{1, 0, 0, 1, 0},{0, 0, 0, 0, 0},{1, 1, 1, 1, 0}
};

要实现解决迷宫的问题,可以使用回溯法深度优先搜索(DFS)或者广度优先搜索(BFS)。

思路:

迷宫中的 0 表示可走的路,1 表示障碍。
起点是 (0, 0),终点是 (n-1, m-1)。
可以向上、下、左、右四个方向移动。
通过回溯法探索每个可能的路径,当找到终点时,返回路径。

下面分别使用DFS和BFS来实现。

DFS

/*深度搜索  dfs*/#include <iostream>
#include <vector>using namespace std;// 定义行的上下左右四个方向的移动
// -1表示向上移动,1表示向下移动,0表示不改变行
int row_dir[] = { -1, 1, 0, 0 };  // 定义行的上下左右四个方向的移动
// -1表示向左移动,1表示向右移动,0表示不改变列
int col_dir[] = { 0, 0, -1, 1 };// 检查当前位置是否有效,且未被访问过
bool isValid(int x, int y, const vector<vector<int>>& maze, vector<vector<bool>>& visited) 
{return (x >= 0 && x < maze.size() && y >= 0 && y < maze[0].size() &&maze[x][y] == 0 && !visited[x][y]);
}// 回溯法解决迷宫问题
bool solveMaze(int x, int y, const vector<vector<int>>& maze, vector<vector<bool>>& visited, vector<pair<int, int>>& path) 
{// 到达终点if (x == maze.size() 
http://www.lryc.cn/news/526730.html

相关文章:

  • 机器学习09-Pytorch功能拆解
  • BLE透传方案,IoT短距无线通信的“中坚力量”
  • Linux 中的poll、select和epoll有什么区别?
  • 单片机-STM32 WIFI模块--ESP8266 (十二)
  • linux日志排查相关命令
  • 每日一题-二叉搜索树与双向链表
  • 【多视图学习】Self-Weighted Contrastive Fusion for Deep Multi-View Clustering
  • ASK-HAR:多尺度特征提取的深度学习模型
  • C语言:数据的存储
  • 深入理解动态规划(dp)--(提前要对dfs有了解)
  • 单片机基础模块学习——数码管(二)
  • 【大数据】机器学习----------强化学习机器学习阶段尾声
  • flink写parquet解决timestamp时间格式字段问题
  • redis实现lamp架构缓存
  • 正则表达式中常见的贪婪词
  • CF 339A.Helpful Maths(Java实现)
  • SQL 指南
  • DDD架构实战第七讲总结:分层模型和代码组织
  • Python “字典” 实战案例:5个项目开发实例
  • (一)QT的简介与环境配置WIN11
  • 在 Windows 系统上,将 Ubuntu 从 C 盘 迁移到 D 盘
  • vue2的$el.querySelector在vue3中怎么写
  • GPSd定时检测保活TCP GPS源
  • IDEA中Maven使用的踩坑与最佳实践
  • 使用 Python 调用 OpenAI 的接口初识
  • 2025 最新flutter面试总结
  • 【MQ】RabbitMq的可靠性保证
  • STM32 GPIO配置 点亮LED灯
  • Flink把kafa数据写入Doris的N种方法及对比。
  • Vue - 标签中 ref 属性的使用