6.3.2图的深度优先遍历

news2025/5/26 3:14:15

知识总览:

树的先根遍历:

采用递归一直找某个节点的子树直到找不到从上往下找

访问根节点1,1的子树有2、3、4,访问2,2节点子树有5访问5,5没有子树,退回到2,2还有子树6访问6,6没有子树再退回到2,2的子树都被访问了再退回到1,1还有子树3没访问访问3,3没子树退回到1,1还有子树4没访问访问4,4的子树有7、8,访问7,7没有子树退回到4,4还有子树8没访问访问8,8没子树退回到4,4的子树都访问了退回到1,1的子树都访问了,访问完毕。节点序列为1,2,5,6,3,4,7,8

 

 代码版图的深度优先遍历:

为了保证每个顶点不被重复访问,于是加了visited数组,跟广度优先遍历同

深度优先遍历就是直向遍历找子孙,找到一个方向之后就遍历到最底部,直到没有邻接点。就是假如A和B、C邻接,B和D邻接,C和E、F邻接,E和G邻接

深度优先遍历是找A,从A找到了B或C,然后找B的D,B、D这一条线找完了再去找A的C,然后找C的E,E的G,这一条线找完了找C的F,然后结束

A、B、D、C、E、G、F(访问谁就写谁的顺序)

广度优先遍历是横向遍历找大伯,找A,从A找到了B、C,再找B的D,再找C的E、F,再找D的B,B已经找着了就不找了,然后找E的G,再找F,再找G

A、B、C、D、E、F、G(访问谁就写谁的顺序)

代码版深度优先遍历-优化版:

跟广度优先遍历相同,如果是非连通图,可能会导致一些节点没有被访问,因此加了for循环visited数组来访问值为false的节点

 

复杂度分析

跟广度优先遍历同

空间复杂度:

主要看递归带来的空间复杂度,最差的递归就是1个顶点与其他顶点都相邻,递归深度为O(V),最好的是邻接1个顶点O(1),递归深度为1?

时间复杂度:

主要看访问顶点+边的时间复杂度

邻接矩阵还是确定行列顶点的数量来确定该顶点是否有邻接边,即与顶点数量有关与边无关O(v²),邻接表还是通过顶点数量+邻接边的数量来确定递归几次,因为每个边实际就访问一次,所以不用相乘?即O(V)+O(E)

 

深度优先遍历序列过程:

以邻接表为例:

从2出发(如下第一张图),先访问2节点,2节点的邻接点是1、6,访问1,1的邻接点是2、5,2被访问不再访问则访问5,5的邻接点是1已被访问不再访问退回到1,1的邻接点2、5都被访问退回到2,2还有6没有访问则访问6,6的邻接点是2、3、7,2被访问,3没有被访问访问3,3的邻接点是4、6、7,4没被访问访问4,4的邻接点是3、7、8,3被访问7没被访问访问7,7的邻接点是3、4、6、8,3,4,6被访问则访问8,8的邻接点是4、7,4,7被访问回退到7节点,7没有邻接点被访问了回退到4,4没有被访问的邻接点了回退到3,3也没有了回退到6,6没有回退到5,5没有回退到1,1没有回退到2,2没有结束

2、1、5、6、3、4、7、8(访问谁就把谁的节点号写在后边)

 

深度优先生成树:

跟广度优先生成树同,都是把该顶点首次被访问的边标红,然后去掉黑色的边剩下的部分就是深度优先生成树,邻接矩阵就一种表示方式所以深度优先生成树就一个,邻接表因为邻接边表示方式不同导致深度优先生成树可能会有多个

 

深度优先生成森林:

非连通图图有几个连通分量,生成几个深度优先生成树,然后几个深度优先生成树合起来叫深度优先生成森林

 

图的遍历与联通性:

DFS加了for循环visited数组中未被访问的逻辑后,因为未被访问的才会走DFS,所以无向图的非连通图有几个连通分量就会调用几次DFS,连通图因为递归的原因只调用一次DFS

有向图起始顶点到其他顶点都有路径只需调用1次BFS/DFS

 

  知识回顾:

。。。。。。。。。 纯属瞎写。。。。。。。。。

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

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

相关文章

畅游Diffusion数字人(30):情绪化数字人视频生成

畅游Diffusion数字人(0):专栏文章导航 前言:仅从音频生成此类运动极具挑战性,因为它在音频和运动之间存在一对多的相关性。运动视频的情绪是多元化的选择,之前的工作很少考虑情绪化的数字人生成。今天解读一个最新的工作FLOAT,可以生成制定情绪化的数字人视频。 目录 贡献…

UE5 Va Res发送请求、处理请求、json使用

文章目录 介绍发送一个Get请求发送Post请求设置请求头请求体带添json发送请求完整的发送蓝图 处理收到的数据常用的json处理节点 介绍 UE5 自带的Http插件,插件内自带json解析功能 发送一个Get请求 只能写在事件图表里 发送Post请求 只能写在事件图表里 设置…

【读代码】BAGEL:统一多模态理解与生成的模型

一、项目概览 1.1 核心定位 BAGEL是字节跳动推出的开源多模态基础模型,具有70亿激活参数(140亿总参数)。该模型在统一架构下实现了三大核心能力: 多模态理解:在MME、MMBench等9大评测基准中超越Qwen2.5-VL等主流模型文本生成图像:生成质量媲美SD3等专业生成模型智能图像…

隧道自动化监测解决方案

行业现状 隧道作为一种重要的交通运输通道,不管是缓解交通压力,还是让路网结构更趋于完善,它都有着不可估量的作用。隧道在运营过程中,由于受到材料退化、地震、人为因素等影响会发生隧道主体结构的损坏和劣化。若不及时检修和维护…

游戏引擎学习第307天:排序组可视化

简短谈谈直播编程的一些好处。 上次结束后,很多人都指出代码中存在一个拼写错误,因此这次我们一开始就知道有一个 bug 等待修复,省去了调试寻找错误的时间。 今天的任务就是修复这个已知 bug,然后继续排查其他潜在的问题。如果短…

java接口自动化初识

简介 了解什么是接口和为什么要做接口测试。并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程。 一、什么是接口 在这里我举了一个比较生活化的例子,比如我们有一台笔记本,在笔记本的两端有很多插口。例如:USB插口。那…

NVM安装使用及问题解决

目录 一、前言 二、NVM安装 三、配置下载源 四、nvm使用 五、安装nvm list available没有的版本 六、问题解决 一、前言 如果你开发 Node.js 项目,可能会遇到这些问题: ①新项目需要 Node.js 18,但老项目只能用 Node.js 14,…

C++学习之STL学习:string类使用

在之前的学习中,我们初步了解到了STL的概念,接下来我们将深入学习STL中的string类的使用,后续还会结合他们的功能进行模拟实验 目录 为什么要学习string类? 标准库中的string类 string类(了解) auto和范围…

5月24日day35打卡

模型可视化与推理 知识点回顾: 三种不同的模型可视化方法:推荐torchinfo打印summary权重分布可视化进度条功能:手动和自动写法,让打印结果更加美观推理的写法:评估模式 作业:调整模型定义时的超参数&#x…

Linux(7)——进程(概念篇)

目录 一、基本概念 二、描述进程——PCB 1.task_struct——PCB的一种 2.task_struct的内容分类 三、查看进程 1.通过系统目录查看 2.通过ps命令查看 四、通过系统调用获取进程的PID和PPID 五、通过系统调用创建进程 1.fork函数创建子进程 2.使用if来引出问题 六、L…

前端流行框架Vue3教程:24.动态组件

24.动态组件 有些场景会需要在两个组件间来回切换&#xff0c;比如 Tab 界面 我们准备好A B两个组件ComponentA ComponentA App.vue代码如下&#xff1a; <script> import ComponentA from "./components/ComponentA.vue" import ComponentB from "./…

Unity3D仿星露谷物语开发48之显示树桩效果

1、目标 砍完橡树之后会露出树桩&#xff0c;然后树桩可以用斧头收割&#xff0c;并将创建一个新的砍树桩的粒子效果。 这里有&#xff1a;一种作物收获后创造另一种作物的逻辑。 2、分析 在SO_CropDetailsList中&#xff0c;Harvested Transform Item Code可以指定收获后生…

[Datagear] 实现按月颗粒度选择日期的方案

在使用 Datagear 构建数据分析报表时,常常会遇到一个问题:如果数据的目标颗粒度是“月”,默认的日期控件却是精确到“日”的,这在用户交互和数据处理层面会带来不必要的复杂度。本文将分享两种解决方案,帮助你更好地控制日期控件的颗粒度,实现以月为单位的日期筛选功能。…

漏洞检测与渗透检验在功能及范围上究竟有何显著差异?

漏洞检测与渗透检验是确保系统安全的重要途径&#xff0c;这两种方法各具特色和功效&#xff0c;它们在功能上有着显著的差异。 目的不同 漏洞扫描的主要任务是揭示系统内已知的安全漏洞和隐患&#xff0c;这就像是对系统进行一次全面的健康检查&#xff0c;看是否有已知的疾…

DB-GPT扩展自定义Agent配置说明

简介 文章主要介绍了如何扩展一个自定义Agent&#xff0c;这里是用官方提供的总结摘要的Agent做了个示例&#xff0c;先给大家看下显示效果 代码目录 博主将代码放在core目录了&#xff0c;后续经过对源码的解读感觉放在dbgpt_serve.agent.agents.expand目录下可能更合适&…

家政维修平台实战09:推送数据到多维表格

目录 1 API调试2 创建云函数3 前端调用整体效果总结 上一篇我们搭建了服务分类的后台功能&#xff0c;对于分类的图标通过集成TOS拿到了可以公开访问的地址&#xff0c;本篇我们将写入的数据推送至多维表格中。 1 API调试 要想推送多维表格的数据&#xff0c;首先要利用官方的…

前端框架token相关bug,前后端本地联调

今天我搭建框架的时候&#xff0c;我想请求我自己的本地&#xff01;然后我自己想链接我自己的本地后端&#xff0c;我之前用的前端项目&#xff0c;都是链别人的后端&#xff0c;基本上很少情况会链接自己的后端&#xff01;所以我当时想的是&#xff0c;我前后端接口一样&…

卷积神经网络(CNN)可视化技术详解:从特征学到演化分析

在深度学习领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;常被称为“黑箱”&#xff0c;其内部特征提取过程难以直接观测。而 可视化技术 是打开这一“黑箱”的关键工具&#xff0c;通过可视化可直观了解网络各层学到了什么、训练过程中如何演化&#xff0c;以及模型…

QT之INI、JSON、XML处理

文章目录 INI文件处理写配置文件读配置文件 JSON 文件处理写入JSON读取JSON XML文件处理写XML文件读XML文件 INI文件处理 首先得引入QSettings QSettings 是用来存储和读取应用程序设置的一个类 #include "wrinifile.h"#include <QSettings> #include <QtD…

微信小程序调用蓝牙API “wx.writeBLECharacteristicValue()“ 报 errCode: 10008 的解决方案

1、问题现象 问题:在开发微信小程序蓝牙通信功能时,常常会遇到莫名其妙的错误,查阅官方文档可能也无法找到答案。如在写入蓝牙数据时,报了这样的错误: {errno: 1500104, errCode: 10008, errMsg: "writeBLECharacteristicValue:fail:system error, status: UNKNOW…