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/9 14:26:54

RTSP模拟开发:轻松搭建本地摄像头推流

在开发中我们可能会涉及到连接摄像头的开发&#xff0c;但是在本地环境我们没有相关的连接时&#xff0c;就需要本地进行模拟。 ✅ 推荐方案&#xff1a;使用 RTSP Simple Server&#xff08;RSS&#xff09; 这是一个用 Go 写的超轻量、零依赖、单文件 RTSP 服务器&#xff…

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

Pock:重新定义MacBook触控栏的终极解决方案

Pock&#xff1a;重新定义MacBook触控栏的终极解决方案 【免费下载链接】pock Widgets manager for MacBook Touch Bar 项目地址: https://gitcode.com/gh_mirrors/po/pock 你是否曾经觉得MacBook的Touch Bar功能有限&#xff0c;无法充分发挥其潜力&#xff1f;Pock作为…

作者头像 李华
网站建设 2026/6/8 12:54:23

面对市场上的RPA软件如何选择?

选择RPA数据采集工具时&#xff0c;建议您根据具体业务场景、对稳定性和安全性的要求、以及操作便捷性等因素进行综合考量。没有“最好”的工具&#xff0c;只有最适合您需求的方案。如果追求极致易用和电商适配&#xff0c;影刀RPA是首选&#xff1b;金融领域看重安全稳定&…

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

Swin Transformer重塑目标检测:从效率瓶颈到性能突破的实战指南

Swin Transformer重塑目标检测&#xff1a;从效率瓶颈到性能突破的实战指南 【免费下载链接】detr End-to-End Object Detection with Transformers 项目地址: https://gitcode.com/gh_mirrors/de/detr 在计算机视觉领域&#xff0c;目标检测技术正面临前所未有的效率挑…

作者头像 李华
网站建设 2026/6/7 7:36:54

【OpenHarmony】OpenHarmony ETS Utils实现

OpenHarmony ETS Utils 模块 1. 模块概述 源码&#xff1a;https://gitee.com/openharmony/commonlibrary_ets_utils 1.1 功能与目标 1.1.1 主要功能 OpenHarmony ETS Utils 是一个综合性的工具库&#xff0c;为OpenHarmony系统提供核心的JavaScript/TypeScript运行时工具…

作者头像 李华
网站建设 2026/6/7 7:19:04

28、全面解析用户管理:从基础操作到高级安全设置

全面解析用户管理:从基础操作到高级安全设置 在系统管理的领域中,用户管理是至关重要的一环。系统管理员需要对用户和用户组进行全面的管理,包括添加、删除用户和用户组,修改访问权限等。以下将详细介绍用户管理的各个方面。 1. 用户管理工具 在管理用户时,有多种工具可…

作者头像 李华