news 2026/4/23 12:24:22

代码随想录 深度优先搜索理论基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录 深度优先搜索理论基础

一、dfs与bfs的区别:

1.大致区别:

(1)dfs:紧着一个方向去搜,直到搜不下去再换方向(换方向的过程涉及到了回溯)。

(2)bfs:先把本节点所连接的所有节点遍历一遍,走到下一个节点的时候,再把连接节点的所有节点遍历一遍,搜索方向更像的是广度四面八方的搜索过程。

二、dfs的搜索过程:

举例,如下图所示。

1.该图是一个无向图,要搜索从节点1到节点6的所有路径。

2.dfs搜索的第一条路径如下所示:

3.此时找到了节点6,该回头再去搜索其他方向了:

4.又到了节点6,再回头去搜索其他方向:

5.又找到了一条从节点1到节点6的路径,再回头:发现路径7、8和路径7、9都是死路,都走到了已经遍历过的节点。

6.那么节点2所连接的路径和节点3所连接的路径都已经走过了,撤销路径只能向上回退,去撤销当初节点4的选择,也就是撤销路径5改为路径10。

三、代码框架:由于dfs搜索紧着一个方向,且需要回溯,因此使用递归的方式实现是最方便的,代码框架如下所示。

void dfs(参数) { if (终止条件) { 存放结果; return; } for (选择:本节点所连接的其他节点) { 处理节点; dfs(图,选择的节点); // 递归 回溯,撤销处理结果 } }

四、深搜三部曲:

1.确定递归函数和参数:

void dfs(参数)

一般情况下,深搜需要二维数组的数组结构保存所有的路径,需要一维数组保存单一路径,这种保存结果的数组,可以定义为全局变量,以避免函数参数过多。

vector<vector<int>> result; // 保存符合条件的所有路径 vector<int> path; // 起点到终点的路径 void dfs (图,目前搜索的节点)

2.确认终止条件:防止出现死循环、栈溢出等问题。

if (终止条件) { 存放结果; return; }

3.处理当前搜索节点出发的路径:一般就是使用一个for循环去遍历当前搜索节点所能走到的所有节点。

for (选择:本节点所连接的其他节点) { 处理节点; dfs(图,选择的节点); // 递归 回溯,撤销处理结果 }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 21:00:07

FTXUI ResizableSplit实战指南:从布局困扰到高效开发

FTXUI ResizableSplit实战指南&#xff1a;从布局困扰到高效开发 【免费下载链接】FTXUI :computer: C Functional Terminal User Interface. :heart: 项目地址: https://gitcode.com/gh_mirrors/ft/FTXUI 还在为终端界面布局不够灵活而烦恼吗&#xff1f;你可能会遇到这…

作者头像 李华
网站建设 2026/4/18 12:47:27

免费高效JSON/YAML文件翻译解决方案:json-translator全攻略

免费高效JSON/YAML文件翻译解决方案&#xff1a;json-translator全攻略 【免费下载链接】json-translator jsontt &#x1f4a1; - FREE simple CLI to translate your json files into other languages ✅ Check Readme ✌ stable version is v1.9.0 项目地址: https://gitc…

作者头像 李华
网站建设 2026/4/22 20:38:41

商务会议听不懂?实时语音对话翻译技术助你轻松搞定跨语言沟通

还在因为听不懂没字幕的“生肉”美剧而抓狂&#xff1f;或者在跨国Zoom会议上因为跟不上语速而瑟瑟发抖&#xff1f;语言障碍不应成为你探索世界的“拦路虎”。在这个AI技术爆发的时代&#xff0c;我们只需动动手指&#xff0c;利用语音转文字带翻译的黑科技&#xff0c;就能给…

作者头像 李华
网站建设 2026/4/2 3:40:15

竞赛毕业设计作品---【芳心科技】F. PLC轨距调节系统

实物效果图&#xff1a;实现功能&#xff1a;课题任务&#xff1a;1、根据产品的大小调节固定导轨与移动导轨之间的宽窄来输送产品。2、轨距的起始位&#xff1a;固定导轨与移动导轨任意宽窄距离。3、轨距的原点位&#xff1a;固定导轨与移动导轨的最大限定距离。4、轨距的终点…

作者头像 李华
网站建设 2026/4/18 21:19:56

竞赛毕业设计作品定做---【芳心科技】F. PLC饲料配置系统

实物效果图&#xff1a;实现功能&#xff1a;本设计基于PLC&#xff0c;依据饲料生产系统的工艺流程介绍了配料的流量控制方式和饲料生产配料系统控制过程&#xff0c;详细讲述了PLC的选型及PLC饲料生产系统智能控制中的硬件设置、参数设定和软件设计过程。可以提高饲料生产线配…

作者头像 李华
网站建设 2026/4/20 16:49:42

TinyMCE6处理站群平台pdf文档解析

企业网站后台Word粘贴与导入功能开发方案 方案概述 大家好&#xff0c;我是重庆某软件公司的ASP.NET前端工程师&#xff0c;最近接到了一个企业网站后台管理系统的增强需求&#xff0c;需要在TinyMCE编辑器中增加Word粘贴功能和多格式文档导入功能。经过一番研究和评估&#…

作者头像 李华