C++学习/复习补充记录 --- 图论(深搜,广搜)

news2024/12/24 19:54:30

数据结构与算法 | 深搜(DFS)与广搜(BFS)_深搜广搜算法-CSDN博客

深度优先搜索理论基础

深搜和广搜的区别

(通俗版)

  • dfs是可一个方向去搜,不到黄河不回头,直到遇到绝境了,搜不下去了,再换方向(换方向的过程就涉及到了回溯)。
  • bfs是先把本节点所连接的所有节点遍历一遍,走到下一个节点的时候,再把连接节点的所有节点遍历一遍,搜索方向更像是广度,四面八方的搜索过程。

二叉树的递归法,就是dfs。

二叉树的迭代法,就是bfs(广度优先搜索)。

所以dfs,bfs其实是基础搜索算法,也广泛应用与其他数据结构与算法中

深度优先搜索(Depth First Search)

深搜dfs关键就两点:

  • 搜索方向,是认准一个方向搜,直到碰壁之后再换方向
  • 换方向是撤销原路径,改为节点链接的下一个路径,回溯的过程。

因为dfs搜索可一个方向,并需要回溯,所以用递归的方式来实现是最方便的。

回溯链接:C++学习/复习补充记录 --- 递归、回溯_c++中回溯是啥-CSDN博客

深搜三部曲

1、确认递归函数,参数

2、确认终止条件

3、处理目前搜索节点出发的路径


深搜代码模板:

//1、确认递归函数,参数
vector<vector<int>> result; // 保存符合条件的所有路径(存放结果组合的vector)
vector<int> path; // 起点到终点的路径(单个组合结果)
 
void dfs (图,目前搜索的节点)  {
    if (剪枝条件) return;//剪枝

    //2、确认终止条件
    if (终止条件) {
        result.push_back(path);//存放结果;
        return;
    }
 
    //3、处理目前搜索节点出发的路径
    for (选择:本层节点所连接的其他节点) {
        处理节点;(做选择)
        dfs(图,选择的节点); // 递归
        回溯,撤销处理结果(撤销选择)
    }
}

(回溯撤销处理结果其实就是:撤回一步,回到上一步重新走另一个方向。)

广度优先搜索(Breadth First Search)

实际应用

输入数据的含义:

例一

输入:graph = [[1,2],[3],[3],[]]

节点0可链接到的节点有:节点1,节点2;

节点1可链接到的节点有:节点3;

节点2可链接到的节点有:节点3;

节点3可链接到的节点有:无。

例二

输入:graph = [[4,3,1],[3,2,4],[3],[4],[]]

节点0可链接到的节点有:节点4,节点3,节点1;

节点1可链接到的节点有:节点3,节点2,节点4;

节点2可链接到的节点有:节点3;

节点3可链接到的节点有:节点4;

节点4可链接到的节点有:无。

1.1 所有可能的路径 (深搜)

给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序

 graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节点 graph[i][j]存在一条有向边)。

1

1.2 

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

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

相关文章

消费电子钛时代到来!天工股份抢占发展高地,业绩爆发式增长、前景广阔

消费电子“钛时代”正加速到来。 27日凌晨&#xff0c;苹果正式定档iPhone 16系列新品的发布会日期。据悉&#xff0c;本次iPhone 16 Pro系列将全系标配钛金属中框&#xff0c;继续沿用并升级此前在iPhone 15 Pro系列上应用的钛金属材质。 回看去年9月秋季新品发布会&#xf…

三秒学会--百度网盘下载提速10倍的小tip

开启优化速率 从2mb-->20mb 纵享新丝滑~

PHP安装扩展包时忽略依赖强制安装

正常安装时会检查依赖包&#xff0c;比如是否安装了reids扩展&#xff0c;是否安装了gd库等&#xff0c;卖到依赖包安装失败。 如下提示&#xff1a; 这样会导致你的包安装不上。 使用下面命令&#xff0c;强制安装&#xff0c;如下&#xff1a; 加上 --ignore-platform-req…

常见概念 -- dBm, mW,dB之间的关系

dBm与mW dBm&#xff08;毫瓦分贝&#xff09;与mW&#xff08;毫瓦&#xff09;都是光功率的单位。 两者之间的换算关系&#xff1a;dBm10xlgP。其中P为功率&#xff0c;单位为mW。 如&#xff1a;1mW可换算为0dBm。 dBm与dB dBm为光功率的单位&#xff0c;d…

GraphPad Prism下载安装教程怎样中文汉化

GraphPad Prism下载安装教程怎样中文汉化&#xff1a; GraphPad Prism 是一款集生物统计、曲线拟合和科技绘图于一体的软件&#xff0c;主要用于医学和生物科学领域的数据分析和绘图&#xff0c;具有高效、简便、多功能和高质量的特点&#xff0c;被广泛应用于科研、教育和业界…

告别繁琐,拥抱简单!用户好评如潮的录屏软件

不论你是有游戏过程录制的需求&#xff0c;还是教学片段录制的需求肯定都需要电脑屏幕录制工具吧。除了小巧便捷的ocam录屏之外还有不少类似工具可供我们选择。这次我就给你介绍几款我用过的录屏工具吧。 1.福昕录屏大师 链接&#xff1a;www.foxitsoftware.cn/REC/ 这款录屏…

智慧猪场实训中心解决方案

一、引言 随着科技的飞速发展&#xff0c;传统养猪业正经历着前所未有的变革。为了提高养猪效率、降低生产成本并保障猪只健康&#xff0c;智慧养猪场的概念应运而生。唯众特此推出《智慧猪场实训中心解决方案》&#xff0c;旨在通过先进的技术与管理手段&#xff0c;为养猪业培…

MQ专题:延迟消息的通用方案

一、主要内容 本文将实现一个MQ延迟消息的通用方案。 方案不依赖于MQ中间件&#xff0c;依靠MySQL和DelayQueue解决&#xff0c;不管大家用的是什么MQ&#xff0c;具体是RocketMQ、RabbitMQ还是kafka&#xff0c;本文这个方案你都可以拿去直接使用&#xff0c;可以轻松实现任…

【安规电容】

安规电容&#xff08;Safety Capacitors&#xff09;是一种专门设计用于电气设备中的电容器&#xff0c;主要用于确保电气安全&#xff0c;特别是用于交流电路中的滤波、降噪以及跨接隔离等功能。它们必须符合特定的安全标准&#xff0c;以确保电气设备在各种运行条件下都能保持…

MySQL:简述数据库的主从复制

MySQL主从复制是指数据可以从一个MySQL数据库主节点复制到一个或多个从节点。 MySQL默认采用异步复制方式&#xff0c;这样从节点不用一直访问主节点来更新自己的数据&#xff0c;数据的更新可以在远程连接上进行&#xff0c;从节点可以复制主节点中的所有数据库或者特定的数据…

FastJson序列化驼峰-下划线转换问题踩坑记录

背景 问题描述 在MySQL数据表中&#xff0c;存在一个JSON结构的扩展字段&#xff0c;通过updateById进行更新写入操作。更新写入的同一个字段名出现了混合使用了驼峰命名和下划线命名两种格式。 ps: FastJson版本是1.2.83 问题影响 数仓同学离线统计数据时发现字段名有两种…

【生命之树】

题目 思路 求联通区域中的最大和值 代码 #include <bits/stdc.h> using namespace std; const int N 1e510, M N << 1; const int null -0x3f3f3f3f; long long w[N]; int h[N], e[M], ne[M], idx; void add(int a, int b) // 添加一条边a->b {e[idx] b,…

虚幻5|(1)技能栏快捷格子的制作|(2)如何在游戏进行的时候显示鼠标,使用鼠标操作UI||(3)改进技能释放

一.创建技能栏格子UI 1.创建一个UI控件蓝图&#xff0c;命名为技能栏格子&#xff08;如何创建我就不多说了&#xff0c;学到这了基础知识应该有所掌握了&#xff09; 2.添加一个边界和垂直框 3.选中边界&#xff0c;右侧细节栏更改如下 4.再拖入一个文本块&#xff0c;做垂直…

java同步概念

同步&#xff08;Synchronization&#xff09;在Java多线程编程中是一个既重要又复杂的概念。它涉及到如何确保多个线程在访问共享资源时能够保持数据的一致性和完整性&#xff0c;避免出现竞态条件&#xff08;Race Condition&#xff09;等问题。 同步的基本概念 同步的主要目…

视频结构化从入门到精通——视频结构化主要技术介绍

视频结构化主要技术 1 视频接入 “视频接入”是视频结构化管道的起点&#xff08;SRC Point&#xff09;视频接入是视频结构化处理的第一步&#xff0c;它涉及将视频数据从各种采集源获取到系统中进行进一步处理。视频接入的质量和稳定性对后续的数据处理、分析和应用至关重要…

128 最长连续序列

解题思路&#xff1a; \qquad 由于题目要找的是最长连续序列&#xff0c;那么若已知序列起点&#xff0c;目标值递增向后遍历&#xff0c;借助哈希表检查目标值是否存在&#xff0c;可以在 O ( n ) O(n) O(n)时间内完成。 \qquad 但是若从数组每一个元素开始&#xff0c;遍历…

Datawhale X 李宏毅苹果书 AI夏令营_深度学习基础学习心得Task2.2

本次学习分类问题 1、分类与回归&#xff1a; 回归一般输出一个值y_hat 期望与y越接近越好。分类一般有几类就输出几个值&#xff0c;是一个one-hot的向量&#xff0c;在类别对应的位置值为1 本文介绍了一种重复输出数值后加权的方法&#xff0c;但是我做分类一般用全连接层…

【uniapp重大bug】uni-data-select的localdata改变,也会触发@change方法

bug描述 uni-data-select的下拉列表值localdata是动态获取的&#xff0c;且绑定了change方法&#xff0c;在页面加载后&#xff0c;请求localdata的列表数据&#xff0c;给localdata重新赋值&#xff0c;此时发现自动触发了change方法 当前uni版本&#xff1a;^2.0.2-30709202…

全场景——(七)libmodbus 使用

文章目录 一、libmodbus开发库1.1 功能概要1.2 源码获取1.3 libmodbus与应用程序的关系 二、libmodbus源代码解析2.1 核心函数2.2 框架分析与数据结构2.3 情景分析2.3.1 初始化2.3.2 主设备发送请求2.3.3 从设备接收请求2.3.4 从设备回应 2.4 常用接口函数2.4.1 各类辅助接口函…

2024版Assimp配置教程

最近想看看图形学&#xff0c;选择速通LearnOpenGL&#xff0c;不出意外最耗时间的依然是配置环境。按照教程上的把GLFW等等配置的没有问题&#xff0c;但是在Assimp这里卡住了。原因是教程上说的不详细&#xff0c;而网上查的又和现在的版本相去甚远&#xff0c;导致捣鼓了好一…