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

C++学习/复习补充记录 --- 图论(深搜,广搜)

数据结构与算法 | 深搜(DFS)与广搜(BFS)_深搜广搜算法-CSDN博客

深度优先搜索理论基础

深搜和广搜的区别

(通俗版)

  • dfs是可一个方向去搜,不到黄河不回头,直到遇到绝境了,搜不下去了,再换方向(换方向的过程就涉及到了回溯)。
  • bfs是先把本节点所连接的所有节点遍历一遍,走到下一个节点的时候,再把连接节点的所有节点遍历一遍,搜索方向更像是广度,四面八方的搜索过程。

二叉树的递归法,就是dfs。

二叉树的迭代法,就是bfs(广度优先搜索)。

所以dfs,bfs其实是基础搜索算法,也广泛应用与其他数据结构与算法中

深度优先搜索(Depth First Search)

深搜dfs关键就两点:

  • 搜索方向,是认准一个方向搜,直到碰壁之后再换方向
  • 换方向是撤销原路径,改为节点链接的下一个路径,回溯的过程。

因为dfs搜索可一个方向,并需要回溯,所以用递归的方式来实现是最方便的。

回溯链接:C++学习/复习补充记录 --- 递归、回溯_c++中回溯是啥-CSDN博客

深搜三部曲

1、确认递归函数,参数

2、确认终止条件

3、处理目前搜索节点出发的路径


深搜代码模板:

//1、确认递归函数,参数
vector<vector<int>> result; // 保存符合条件的所有路径(存放结果组合的vector)
vector<int> path; // 起点到终点的路径(单个组合结果)void dfs (图,目前搜索的节点)  {if (剪枝条件) return;//剪枝//2、确认终止条件if (终止条件) {result.push_back(path);//存放结果;return;}//3、处理目前搜索节点出发的路径for (选择:本层节点所连接的其他节点) {处理节点;(做选择)dfs(图,选择的节点); // 递归回溯,撤销处理结果(撤销选择)}
}

(回溯撤销处理结果其实就是:撤回一步,回到上一步重新走另一个方向。)

广度优先搜索(Breadth First Search)

实际应用

输入数据的含义:

例一

输入:graph = [[1,2],[3],[3],[]]

节点0可链接到的节点有:节点1,节点2;

节点1可链接到的节点有:节点3;

节点2可链接到的节点有:节点3;

节点3可链接到的节点有:无。

例二

输入:graph = [[4,3,1],[3,2,4],[3],[4],[]]

节点0可链接到的节点有:节点4,节点3,节点1;

节点1可链接到的节点有:节点3,节点2,节点4;

节点2可链接到的节点有:节点3;

节点3可链接到的节点有:节点4;

节点4可链接到的节点有:无。

1.1 所有可能的路径 (深搜)

给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序

 graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。

1

1.2 


http://www.mrgr.cn/news/14932.html

相关文章:

  • JVM性能监控实用工具jconsole与jvisualvm
  • okhttp异步请求连接阻塞问题排查
  • Microsoft 将在 CrowdStrike 服务中断后举办 Windows 安全峰会
  • 2024前端面试题分享
  • python 实现一个简单的网页爬虫程序
  • 基于 XILINX FPGA 的 Cameralink Full 模式相机采集系统技术实施方案研究报告
  • Mybatis部分笔记二——Spring:
  • elasticsearch存入数据嵌入式数据解决扁平化查询问题
  • 告别繁琐,拥抱简单!用户好评如潮的录屏软件
  • app抓包环境的搭建详细教程
  • chapter09-项目——(房屋出租系统)——day11
  • vue打印数据
  • 深入理解DPO(Direct Preference Optimization)算法
  • #C++ 笔记三
  • 最大子数组(有限制)
  • 【BPF之旅】认识eBPF
  • cola_os学习笔记(下)
  • mysql8.0查询等级排名可使用窗口函数,那5.7的版本呢?
  • 设计模式-简单工厂模式工厂方法模式
  • cesium模型加载-点击-高亮