news 2026/6/9 23:53:17

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

作者头像

张小明

前端开发工程师

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/6/10 2:36:31

统一维度参考文章

Hybrids reveal accessible chromatin trans genetic associations 杂交后代揭示可及染色质的反式遗传关联 对遗传背景差异大的玉米&#xff08;Zea mays&#xff09;自交系进行杂交&#xff0c;可产生杂交优势&#xff08;heterosis&#xff09;&#xff1a;即植株营养生长和籽…

作者头像 李华
网站建设 2026/6/9 6:03:37

HTML如何设计跨平台的大文件分片上传界面?

大文件传输解决方案设计与实现 项目背景与需求分析 作为上海一家软件公司的项目负责人&#xff0c;我们面临一个重要需求&#xff1a;为企业级客户构建一个高稳定性的大文件传输系统。根据需求分析&#xff0c;我们需要解决以下几个关键问题&#xff1a; 超大规模文件处理&a…

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

WebUploader如何支持国密加密的大文件传输?

Vue大文件上传方案重构&#xff1a;从WebUploader到分片断点续传的实践 作为项目技术负责人&#xff0c;近期在处理4GB级文件上传时遇到WebUploader组件的兼容性瓶颈&#xff08;尤其在IE11及国产浏览器中频繁出现内存溢出&#xff09;。经过两周技术调研与POC验证&#xff0c…

作者头像 李华
网站建设 2026/6/9 14:23:20

18、IPsec与虚拟专用网络全解析

IPsec与虚拟专用网络全解析 1. IPsec概述 IPsec(Internet Security Protocol)直接将网络传输安全集成到互联网协议(IP)中,它既集成于新的IPv6协议,也能与旧的IPv4协议配合使用。IPsec提供了数据加密和验证接收主机或网络的方法,该过程可手动处理,也能使用IPsec racoo…

作者头像 李华
网站建设 2026/6/10 1:15:27

指向数组的指针变量

一、引言&#xff1a;数组的本质是什么&#xff1f; 在C语言中&#xff0c;数组和指针有着密不可分的关系。很多人认为数组就是一段连续的内存空间&#xff0c;这没错&#xff0c;但更重要的是要理解&#xff1a;数组名本质上就是一个指向数组第一个元素的常量指针。 想象一下&…

作者头像 李华
网站建设 2026/6/8 11:48:13

29、Linux文件系统全面解析与操作指南

Linux文件系统全面解析与操作指南 1. 引言 在Linux系统中,文件系统是管理和组织文件的核心机制。它不仅决定了文件的存储方式,还影响着系统的性能和稳定性。本文将深入探讨Linux文件系统的各个方面,包括基本概念、目录结构、设备管理、挂载操作、文件系统检查与修复,以及…

作者头像 李华