news 2026/7/25 11:31:50

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

作者头像

张小明

前端开发工程师

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/7/25 3:36:45

Fluent Terminal:重新定义Windows命令行体验的现代化工具

Fluent Terminal&#xff1a;重新定义Windows命令行体验的现代化工具 【免费下载链接】FluentTerminal A Terminal Emulator based on UWP and web technologies. 项目地址: https://gitcode.com/gh_mirrors/fl/FluentTerminal 还在为Windows自带的命令行工具界面陈旧、…

作者头像 李华
网站建设 2026/7/24 16:01:24

互联网大厂Java面试全解析:从Java核心到微服务与云原生

文章内容 场景描述 超好吃是一名刚毕业不久的Java开发小白&#xff0c;今天他来到一家知名互联网大厂进行面试。面试官以严肃但不失亲切的态度对他进行了技术问答。 第一轮&#xff1a;Java核心与平台 面试官&#xff1a; 请简单介绍一下Java SE 8的新特性&#xff1f; 超好吃&…

作者头像 李华
网站建设 2026/7/24 3:36:51

专业的智能招聘会哪家好

智能招聘会行业深度剖析&#xff1a;聘才猫大模型脱颖而出 行业痛点分析 当前&#xff0c;智能招聘会领域面临着诸多技术挑战。数据表明&#xff0c;传统招聘会在信息匹配精准度上存在较大问题&#xff0c;约70%的招聘信息推送未能精准命中目标候选人&#xff0c;导致招聘效率…

作者头像 李华
网站建设 2026/7/24 23:51:58

TinyMCE导入pdf识别图表自动生成代码

将Word文档转换为HTML格式并导入Web富文本编辑器&#xff0c;确实可以通过Word自带的"另存为HTML"功能实现初步转换&#xff0c;但在实际业务场景中&#xff0c;往往需要更精细的处理和优化。以下是完整的解决方案和注意事项&#xff1a; 一、直接使用Word另存为HTML…

作者头像 李华
网站建设 2026/7/24 0:15:50

05:springboot

一&#xff1a;springboot概述二&#xff1a;springboot快速入门三&#xff1a;springboot起步依赖原理分析四&#xff1a;springboot配置五&#xff1a;springboot整合其他框架

作者头像 李华
网站建设 2026/7/24 10:40:50

蜂驰型和正常云服务器有什么区别

蜂驰型多是腾讯云推出的高性价比服务器机型&#xff0c;和正常云服务器&#xff08;以标准CVM、普通轻量服务器为代表&#xff09;的核心区别集中在性能、价格、配置灵活性等方面&#xff0c;具体如下 &#xff1a;1. 性能表现&#xff1a;蜂驰型采用AMD Milan CPU&#xff0c;…

作者头像 李华