[算法日志]图论: 深度优先搜索(DFS)

[算法日志]图论: 深度优先搜索(DFS)

深度优先概论

​ 深度优先搜索算法是一种遍历图这种数据结构的算法策略,其中心思想是朝图节点的一个方向不断跳转,当该节点无下一个节点或所有方向都遍历完时,便回溯朝上一个节点的另一个方向继续遍历。这种搜索策略与回溯法有异曲同工之妙。

DFS的代码框架

void dfs(参数)
{if(终止条件){储存结果;return;}for(遍历节点的各个分支){处理节点;dfs(参数);//调用本函数撤销处理,回溯;}
}

正因为和回溯法有相似之处,所以其在代码结构上与回溯大致相同。

深搜三部曲

  • 确认递归函数及其参数

    ​ 在深搜过程中,我们通常会定义两个数组容器,一个二维数组储存结果,一个一维数组储存节点路径。

    ​ 而递归函数参数我们往往无法在一开始便确认,通常都是在书写递归逻辑时按需添加。

  • 确认终止条件

    ​ 终止条件的不同有时会导致函数的需要遍历的值不同。同时,递归条件如果确定错误会导致死循环,栈溢出等错误。所以确定好递归条件是比较关键的一步。

  • 遍历节点的各个路径

    首先将本节点下一个要遍历的节点放进路径,适当处理后进入递归函数,回来时将该节点从路径中取出,做回溯操作。

深搜的简单应用

leetcode 797

示例代码

	void DFS1(const vector<vector<int>>& mygraph, vector<vector<int>>& result, vector<int>& path, int next){if (mygraph[next].empty() || path.back() == mygraph.size() - 1){if (path.back() == mygraph.size() - 1)result.push_back(path);return;}const int size = mygraph[next].size();for (int i = 0; i < size; ++i){path.push_back(mygraph[next][i]);DFS1(mygraph, result, path, mygraph[next][i]);path.pop_back();}}vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& mygraph){vector<vector<int>> result;vector<int> path;if (mygraph.empty())return result;path.push_back(0);DFS1(mygraph, result, path, 0);return result;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/132131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于金枪鱼群算法的无人机航迹规划-附代码

基于金枪鱼群算法的无人机航迹规划 文章目录 基于金枪鱼群算法的无人机航迹规划1.金枪鱼群搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用金枪鱼群算法来优化无人机航迹规划。 …

数据库性能优化(查询优化、索引优化、负载均衡、硬件升级等方面)

数据库性能优化是提升数据库系统整体性能和响应速度的一系列技术和策略。它可以通过多种方式来实现&#xff0c;包括优化查询语句、索引设计、硬件升级、负载均衡等手段。 合适的数据模型设计 正确的数据模型设计是性能优化的基石。合理的表结构和关系设计可以减少冗余数据&…

告别困惑!JS中‘==‘ 与 ‘===‘ 的真相大揭秘!

当谈到JavaScript中的""和""运算符时&#xff0c;有时候它们的区别可能让人感到困惑。尽管它们都用于比较值&#xff0c;但它们的行为有着重要的差异。在本文中&#xff0c;我们将解释""和""之间的区别&#xff0c;以及在实际编码中如…

vue项目npm install报错解决

一、报错信息 node-sass4.14.1 postinstall: node scripts/build.js 二、解决方式 &#xff08;1&#xff09;删除未成功安装的 node_modules 文件&#xff1b; &#xff08;2&#xff09;为 node-sass 单独设置镜像源&#xff1b; npm config set sass_binary_sitehttps:/…

项目级asp.net框架的LIMS实验室管理系统源码

LIMS可用于管理完整的实验程序&#xff0c;从样品登记到检验、校核、审核到最终批准报告&#xff0c;建立在过程质量控制的基础上&#xff0c;对检测流程进行有效全面的管理&#xff0c;对影响质量的人、机、料、法、环因素加以控制&#xff0c;同时为质量改进提供数据依据。进…

实时目标检测与跟踪:机器视觉的挑战与机遇

实时目标检测与跟踪是机器视觉领域的一个重要研究方向&#xff0c;它涉及到在视频或图像序列中准确地定位和跟踪多个目标对象。这个任务具有很高的挑战性&#xff0c;同时也带来了许多机遇。 挑战&#xff1a; 1. 复杂背景&#xff1a;目标检测与跟踪需要在复杂的背景中准确地…

187. 重复的DNA序列 --力扣 --JAVA

题目 DNA序列 由一系列核苷酸组成&#xff0c;缩写为 A, C, G 和 T.。 例如&#xff0c;"ACGAATTCCG" 是一个 DNA序列 。 在研究 DNA 时&#xff0c;识别 DNA 中的重复序列非常有用。 给定一个表示 DNA序列 的字符串 s &#xff0c;返回所有在 DNA 分子中出现不止一次…

Cassandra介绍(一)

1.1. 概念 Apache Cassandra 是高度可扩展的&#xff0c;高性能的分布式 NoSQL 数据库。 Cassandra 旨在处理许 多商品服务器上的大量数据&#xff0c;提供高可用性而无需担心单点故障。 Cassandra 具有能够处理大量数据的分布式架构。 数据放置在具有多个复制因子的不同机器…

操作符、sed和awk

操作符&#xff1a; d 删除 s sed的替换功能&#xff0c;& s:替换字符串 c&#xff1a;整行替换 y&#xff1a;字符替换&#xff0c;替换前后的长度必须相同。 l&&#xff1a;转换小写的特殊符号&#xff0c;前面要加\转义符 u&&#xff1a;转换成大写的特殊…

Luminar Neo Mac/Windows中文版:引领AI图像编辑的革命性时代

Luminar Neo运用先进的AI技术&#xff0c;能够自动化地完成许多繁琐的编辑任务&#xff0c;如色彩校正、噪点消除、人脸识别等。这不仅大大提高了工作效率&#xff0c;同时也降低了对专业知识和技能的要求。无论你是专业摄影师&#xff0c;还是摄影爱好者&#xff0c;甚至是一个…

产品实习笔记——会员体系 积分体系

文章目录 引入会员体系1. 业务逻辑产品化2. 产品逻辑可视化2.1 成长值&#xff1a;会员等级的判断机制2.1.1 成长值的获得2.1.1 成长值的消耗 2.2 会员等级区间划分2.3 成长值风控体系2.4 会员权益2.4.1 普通会员权益2.4.2 阶梯式会员权益 积分体系有赞商城&#xff08;会员体系…

数据可视化:折线图

1.初看效果 &#xff08;1&#xff09;效果一 &#xff08;2&#xff09;数据来源 2.JSON数据格式 其实JSON数据在JAVA后期的学习过程中我已经是很了解了&#xff0c;基本上后端服务器和前端交互数据大多是采用JSON字符串的形式 &#xff08;1&#xff09;JSON的作用 &#…

设计模式第一课-单例模式(懒汉模式和饿汉模式)

单例模式 个人理解&#xff1a;单例模式实际就是通过类加载的方式获取到一个对象&#xff0c;并且保证这个对象在使用中只有一个&#xff0c;不允许再次被创建 一、懒汉模式 1、懒汉模式的基础写法 代码解释&#xff1a; &#xff08;1&#xff09;、编写LazySingleton类的…

k8s、调度约束

Kubernetes 是通过 List-Watch **** 的机制进行每个组件的协作&#xff0c;保持数据同步的&#xff0c;每个组件之间的设计实现了解耦 用户是通过 kubectl 根据配置文件&#xff0c;向 APIServer 发送命令&#xff0c;在 Node 节点上面建立 Pod 和 Container。 APIS…

基于STC15单片机温度光照蓝牙传输-proteus仿真-源程序

一、系统方案 本设计采用STC15单片机作为主控器&#xff0c;液晶1602显示&#xff0c;DS18B20采集温度&#xff0c;光敏电阻采集光照、按键设置温度上下限&#xff0c;测量温度小于下限&#xff0c;启动加热&#xff0c;测量温度大于上限&#xff0c;启动降温。 二、硬件设计 …

开发知识点-PHP从小白到拍簧片

从小白到拍簧片 位异或运算&#xff08;^ &#xff09;引用符号(&)strlen() 函数base64_encode预定义 $_POST 变量session_start($array);操作符php 命令set_time_limit(7200)isset()PHP 命名空间(namespace)new 实例化类extends 继承 一个类使用另一个类方法error_reporti…

长短期神经网络LSTM的博文分类,长短期神经网络的原理分析

目录 背影 摘要 代码和数据下载:长短期神经网络LSTM的博文分类,长短期神经网络微博博文分类(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88498278 LSTM的基本定义 LSTM实现的步骤 长短期神经网络LSTM的博文分类,长短期神经网络微…

shell脚本使用sudo命令如何避免输入密码

在shell脚本中&#xff0c;可以通过sudo命令的-S选项和echo命令的管道符号结合使用&#xff0c;避免在执行sudo命令时输入密码。具体步骤如下&#xff1a; 在脚本中需要使用sudo命令的地方&#xff0c;加上-S选项&#xff0c;例如&#xff1a; sudo -S command在执行脚本时&…

手机常识:手机卡丢了该怎么补办?三大运营商的补卡攻略来了!

相信很多朋友都有过手机卡丢失的情况&#xff0c;那么手机卡丢失之后&#xff0c;我们该怎么补办呢&#xff1f;目前来讲&#xff0c;线上线下都可以进行流量卡补办&#xff0c;具体的补卡攻略小编给你放在下面了。 ​ 为了方便大家了解&#xff0c;小编把三大运营商的补卡方法…

OpenCV C++ 图像处理实战 ——《基于NCC多角度多目标匹配》

OpenCV C++ 图像处理实战 ——《基于NCC多角度多目标匹配》 一、结果演示二、NCC模板匹配2.1、OpenCV matchTemplate2.2、多角度2.3、多目标2.4、NMS非极大值抑制三、代码实现3.1 制作模板3.1 单目标匹配3.1.1 模板图像旋转3.1.2 旋转目标坐标3.2 多目标匹配3.2.1 制作模板3.2.…