数据结构和算法-图的基本操作以图的广度优先遍历和深度优先遍历

文章目录

  • 图的基本操作
    • 总览
    • 找边
    • 列出与某顶点相连的边
    • 插入顶点
    • 删除顶点
    • 增加边
    • 顶点的第一个邻接点
    • 顶点的下一个邻接点
    • 设置或者获取某条边的权值
    • 总览
  • 图的广度优先遍历
    • 总览
    • 树的广度优先遍历
    • 图的广度优先遍历
    • 树vs图
    • 图广度优先遍历的代码实现
    • 广度优先遍历序列
    • 遍历序列的可变性
    • 算法存在问题
    • 改进后的 复杂度分析
    • 广度优先生成树
    • 广度优先生成森林
    • 练习:有向图的BFS
    • 小结
  • 图的深度优先遍历
    • 总览
    • 树的深度优先遍历
    • 图的深度优先遍历
    • 算法存在的问题
    • 复杂度分析
    • 深度优先遍历序列
    • 深度优先生成树
    • 深度优先生成森林
    • 图的遍历与图的连通性
    • 小结

图的基本操作

总览

在这里插入图片描述

找边

邻接矩阵直接找图中的某个元素是否为1即可
邻接表要遍历顶点的边链表
在这里插入图片描述
在这里插入图片描述

列出与某顶点相连的边

邻接矩阵找行或列
邻接表找顶点对应的边链表
对于有向图的邻接表的入边时候需要将其他顶点的边链表都遍历
在这里插入图片描述
在这里插入图片描述

插入顶点

此时插入的是与其他顶点都没有连接的顶点
在这里插入图片描述

删除顶点

邻接矩阵设置 顶点中的一个变量为布尔型变量用来标记该顶点是否有效,当删除该节点时,只需将该节点所在行和列设置为0即可
邻接表即遍历所有边链表,将有顶点的边都删除,并修改对于的边链表
在这里插入图片描述
在这里插入图片描述

增加边

在这里插入图片描述

顶点的第一个邻接点

就是遍历到的第一个
在这里插入图片描述
在这里插入图片描述

顶点的下一个邻接点

就是遍历到的第二个
在这里插入图片描述

设置或者获取某条边的权值

在这里插入图片描述

总览

在这里插入图片描述

图的广度优先遍历

总览

在这里插入图片描述

树的广度优先遍历

即找根节点的孩子节点先
在这里插入图片描述

图的广度优先遍历

即先访问节点的相邻节点
在这里插入图片描述

树vs图

图遍历可能访问到原先的节点,但树不会,因为它是一直访问孩子节点的
在这里插入图片描述

在这里插入图片描述

图广度优先遍历的代码实现

在这里插入图片描述
访问后入队,然后出队后再将其相邻且没有访问的节点访问,然后再入队,然后再出队再将其相邻且没有访问的节点访问,如此反复
在这里插入图片描述

广度优先遍历序列

在这里插入图片描述

遍历序列的可变性

不同邻接表对应的遍历序列可能不一样
在这里插入图片描述

算法存在问题

非连通图无法遍历完所有节点
解决方法就是每个节点都广度优先遍历
下面是改进

在这里插入图片描述

改进后的 复杂度分析

从结点树和边数考虑(从访问顶点和找各条边考虑)
在这里插入图片描述
在这里插入图片描述

广度优先生成树

广度优先遍历过程生成的
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

广度优先生成森林

即对各个连通分量广度优先遍历即可
在这里插入图片描述

练习:有向图的BFS

有些点BFS不能遍历完所有的结点
在这里插入图片描述

小结

在这里插入图片描述

图的深度优先遍历

总览

在这里插入图片描述

树的深度优先遍历

在这里插入图片描述

图的深度优先遍历

在这里插入图片描述

算法存在的问题

依然是所有顶点都深度优先遍历一次
在这里插入图片描述

复杂度分析

即可能同时调用V次代码(或者说来自递归工作栈)
在这里插入图片描述
即每个结点最终都会进入一次深度优先遍历函数,这样才可能最终深度优先遍历所有节点
只不过邻接矩阵中对应节点进入函数后时间复杂度为V
而邻接表为E
在这里插入图片描述

深度优先遍历序列

在这里插入图片描述
邻接表不一样,深度优先遍历序列可能不一样
在这里插入图片描述
在这里插入图片描述

深度优先生成树

同样,即将遍历序列的其他边去了即可
在这里插入图片描述

深度优先生成森林

在这里插入图片描述
在这里插入图片描述

图的遍历与图的连通性

在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

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

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

相关文章

深眸科技|轻辙视觉引擎以99.9%视觉检测能力为基准,赋能木材加工

轻辙视觉引擎:轻辙视觉引擎是以低代码为基础,深度学习技术为核心的视觉业务流程编排引擎,用于快速搭建部署复杂视觉检测流程软件方案。 轻辙视觉引擎|轻量级产品实现高效应用 作为深眸科技的核心产品之一,轻辙视觉引…

十进制整数转二进制数

十进制整数转二进制数 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 函 数 名:dec_2_bin % 功 能:十进制整数转二进制数 % 输入参数: % % 1.参数dec:十进制数 % % 2.参数width:用多少位宽表示二进制…

论文润色突显研究亮点 papergpt

大家好,今天来聊聊论文润色突显研究亮点,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 标题:论文润色突显研究亮点――提升论文吸引力的关键步骤 一、引言 在学术研究中&#x…

【算法刷题】Day15

文章目录 1. 串联所有单词的子串题干:算法原理代码: 2. 最小覆盖子串题干:算法原理:1、暴力枚举 哈希表2、滑动窗口 哈希表 代码: 1. 串联所有单词的子串 原题链接 题干: 给定⼀个字符串 s 和⼀个字符串…

Vue项目使用WebAssembly之后,Nginx如何解决WebAssembly不支持的问题

在VUE项目中使用WebAssembly之后,打包的项目会出现下面的错误 Uncaught (in promise) TypeError: WebAssembly: Response has unsupported MIME type application/wasm; charsetutf-8 expected application/wasm 可以用以下办法解决 一:单独Nginx配置…

选择排序-排序算法

思路 选择排序(Selection sort)的主要思路是:在要排序的区间内找到一个最大的元素,将它放到数组的最后一个位置,然后在剩余的未排序区间内找到一个最大的元素,将它放到数组的倒数第二个位置。以此类推&…

基于 Flink CDC 构建 MySQL 的 Streaming ETL to MySQL

简介 CDC 的全称是 Change Data Capture ,在广义的概念上,只要是能捕获数据变更的技术,我们都可以称之为 CDC 。目前通常描述的 CDC 技术主要面向数据库的变更,是一种用于捕获数据库中数据变更的技术。CDC 技术的应用场景非常广泛…

抖捧自动直播是什么,系统功能讲解

目前有在做实体行业级商家服务的老板 你还在为不会直播,不敢直播而苦恼吗? 你还在为想做直播,但没空开直播而焦灼吗? 今天,你的问题都可以统统解决 实体行业直播必备黑科技:抖捧AI自动直播 只需要一部手…

【vue】element el-table怎么实现跨页勾选

【vue】element el-table怎么实现跨页勾选 需求 由后端提供分页接口&#xff0c;每一次翻页el-table的数据都会被刷新一次&#xff0c;这种情况下怎么实现跨页的勾选 代码 <el-tableref"multipleTable"v-loading"loading":data"operationList&…

使用阿里巴巴同步工具DataX实现Mysql与ElasticSearch数据同步

一、Linux环境要求 二、准备工作 2.1 Linux安装jdk 2.2 linux安装python 2.3 下载DataX&#xff1a; 三、DataX压缩包导入&#xff0c;解压缩 四、编写同步Job 五、执行Job 六、定时更新 6.1 创建定时任务 6.2 提交定时任务 6.3 查看定时任务 七、增量更新思路 一、Linux环境要…

C#教程(一):面向对象

1、介绍 C#是一种多范式编程语言&#xff0c;但其中一个主要的编程范式是面向对象编程&#xff08;OOP&#xff09;。面向对象编程有一些特点&#xff0c;而C#提供了丰富的功能来支持这些特点。 2、面向对象特点 封装&#xff08;Encapsulation&#xff09;&#xff1a; 封装…

亚马逊云科技产品测评榜单新鲜出炉,你上榜了吗?

随着云计算时代的到来&#xff0c;高新科技产品成为我们生活中不可或缺的东西&#xff0c;亚马逊云科技产品全面发力以创新技术助力每一个用户。感受和测评最热门的亚马逊云科技开发者工具与服务为技术发展提供了更多的可能性。 亚马逊云科技产品测评中&#xff0c;大家借助亚马…

微信小程序--判断目标元素是否在可视区域内(可视区域播放视频)

步骤&#xff1a; 1、创建对象实例 2、获取/指定界面上的节点信息 3、判断节点是否在当前屏幕可视区域 微信API提供了两种获取创建对象实例和获取节点的方法&#xff0c;按照以上步骤&#xff0c;我们一一来看&#xff1a; 1、wx.createSelectorQuery() wx.createSelectorQ…

Nginx访问FTP服务器文件的时效性/安全校验

背景 FTP文件服务器在我们日常开发中经常使用&#xff0c;在项目中我们经常把FTP文件下载到内存中&#xff0c;然后转为base64给前端进行展示。如果excel中也需要导出图片&#xff0c;数据量大的情况下会直接返回一个后端的开放接口地址&#xff0c;然后在项目中对接口的参数进…

使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面xsync

目录 1&#xff0c;功能2&#xff0c;注意点3&#xff0c;shell脚本介绍4&#xff0c;bash内容 1&#xff0c;功能 使用shell脚本将一台虚拟机上面数据分发到其他虚拟机上面。 2&#xff0c;注意点 需要修改的地方&#xff1a;hadoop250 hadoop251 hadoop252 hadoop253 hado…

魔搭社区上线Mistral AI 首个开源 MoE 模型 Mixtral8x7B

Mistral AI 近日发布了首个开源 MoE 模型 Mixtral8x7B&#xff0c;并宣布在魔搭社区上线。 Mixtral-8x7B 是一款混合专家模型&#xff08;Mixtrue of Experts&#xff09;&#xff0c;由8个拥有70亿参数的专家网络组成&#xff0c;在能力上&#xff0c;Mixtral-8x7B 支持32k t…

Java的引用类型有几种?区别是什么?

Java中的引用类型主要分为四种&#xff1a;强引用&#xff08;Strong Reference&#xff09;、软引用&#xff08;Soft Reference&#xff09;、弱引用&#xff08;Weak Reference&#xff09;和虚引用&#xff08;Phantom Reference&#xff09;。这些引用类型在Java中主要用于…

MyBatis-Flex 常见问题

文章目录 官网常见问题MyBatis-Flex 没有启动或者启动出错怎么办&#xff1f;示例中的 AccountMapper 和 "ACCOUNT" 在哪里&#xff0c;报错了。阿里镜像找不到依赖&#xff1f;SpringBoot 3.2 项目&#xff0c;启动报错 Invalid value type for attribute factoryBe…

【Qt5】QMouseEvent的globalPos

2023年12月14日&#xff0c;周四下午 QMouseEvent的globalPos()函数是用于获取鼠标事件发生时的全局坐标。它返回一个QPoint对象&#xff0c;表示鼠标事件的全局位置。 全局坐标是相对于整个屏幕的坐标系&#xff0c;而不是相对于应用程序窗口或控件的坐标系。它可以用来确定鼠…

美颜技术讲解:视频美颜SDK的开发与集成

如今&#xff0c;美颜技术的应用愈发成为吸引用户的一项重要功能。本文将深入探讨视频美颜SDK的开发与集成&#xff0c;揭示其背后的技术原理和实现步骤。 一、美颜技术的背后 美颜技术并非仅仅是简单的滤镜效果&#xff0c;而是一项涉及复杂图像处理和算法的技术。在视频美颜…