分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法学习笔记:图...

图:

图结构区别于线性结构和树型结构,区别可见下图

f9d3b04f72dbd380f4f5ee86b898ad6d.png

逻辑上的图(graph)结构由顶点(vertex)和边(edge)组成。

一个图结构G包含顶点集合V和边集合E,任何两个顶点之间可以有一个边表示两者的关系。

对于一个存在的G,V不可以为空集,E可以为空集。

d0c39514f0b308b43fe9b844ff6e9bd7.png
左中右分别都是图结构

与图相关的概念:

有向图:

边都具有方向的图结构就是有向图结构。边的方向表示访问的方向。

8fa6edf21c2c410aca3d7ca7ff53afdf.png

有向无环图:

对于一个有向图,如果对于任意一个节点来说,从该这一个结点起,不存在路径使得可以重新回到这一结点上,这个有向图就是有向无环图。

50e30a448cb9a52990d249d89d139ffd.png

有向有环图:

与有向无环图相反。

0f323c3cf91b0295b0c2e2d6aff859ea.png

入度,出度:

这一概念只适用于有向图。对于有向图种,一个指向一个顶点的边数量称为个顶点的入度,从这个顶点指出的边的数量称为这个顶点的出度。

b74de2ad905c0440d07744fe17de2e7e.png
11这一顶点的入度是2,出度为3

无向图:

无向图中,连接两个顶点的边是没有方向的,可以在逻辑上认为是两个顶点间如果有边直接连通,则一定两个方向都有的有向图。

fe163fea2011d67ee6ee35209ad1be9e.png

混合图:

混合图种既存在有向边,也存在无向边。

5347f36e35d81767ee62c4b2e322f22d.png

简单图、多重图:

如果在无向图中,直接连通两个顶点的边大于等于2条,这些边称为平行边。

如果在有向图中,直接连通两个顶点的同方向的边大于等于2条,这些边称为平行边。

如果在图中一条边直接连通同一个顶点,就成为自环。

如果在图结构中存在平行边或者自环,这个图就称为多重图,如果两者都不存在,那么称为简单图。

e300622d2d0f670692386f74c6ee1f31.png

无向完全图、有向完全图:

如果在无向图中任意两个顶点之间都存在直接连通两个顶点的边,那么这个无向图就成为无向完全图。

如果在有向图中任意两个顶点之间都存在方向相反的直接连通两个顶点两个边,那么这个有向图就成为有向完全图。

ab2b3c065b0f86e1985c04b7ce568182.png
无向完全图

eb1ad1b38c25186aae6021081f58a0aa.png
有向完全图

稠密图、稀疏图:

边数接近于完全图的图就是稠密图,边数远远少于完全图的图就是稀疏图。

有权图:

连接顶点的边上带有权值的图称为有权图

9c5328da773772cb710e50dd2a2afcc7.png

连通图:

如果无向图中任意两个顶点都可以连通,无论是间接还是直接,那么这个无向图称为连通图。

e739c96259494c0b544a11a3de4eaedf.png
连通图

连通分量:

连通分量就是无向图中的最大连通子图数量,也就是一个无向图分出来的最多的互不连通的部分。对于一个连通图来说,连通分量为1。

c413e3161b52092393a07c90ded4ef70.png

强连通图:

强连通图就是对有向图定义的连通图。

6785503e3c8709164463ae22238cc747.png
强连通图

强连通分量:

同无向图的连通分量概念。

cf87d6a2e099c44778ab4d05ae6a243c.png

图的实现:

图一般有两种实现方法,一种是邻接矩阵,还有一种是邻接表,邻接矩阵实际操作比较复杂,这里主要写邻接表的代码实现。

图的邻接矩阵实现:

无向图

c31a0bac3e7ec9e5ea5db1abac63596d.png

有向图

30debd8edfdc2bd02204222c6b7c05be.png

图的邻接表实现:

图的邻接表实现主要是分别将结点和边存放在结构体中,再以一定的方式将这些结构联系起来。以下实现代码主要使用哈希map来实现有向有权图,代码总体还是以表现思路为主。

//有向有权图的顶点结构,假定顶点存储的元素为int类型

图的遍历:

广度优先搜索(BFS):

广度优先搜索类似于二叉树的层序遍历。从一个指定的顶点开始,将指定的顶点视作逻辑上的第一层,指定的顶点所连通的顶点视作逻辑上的第二层,指定的顶点所联通的顶点所连通的顶点视作逻辑上的第三层,以此类推依次遍历,直到遍历完所有顶点。

1b15c06b9d7b09e877d64879b8cd0bf1.png
BFS的一种情况
//图结构的广度优先遍历

由以上的广度优先遍历实现代码可知,广度优先遍历上逻辑上下一层的元素一定是再当前层元素之后被访问,但是逻辑上同一层的元素的访问先后次序没有规律,这取决于outEdges这一set结构中的存储顺序。

深度优先搜索(DFS):

深度优先搜索的思路类似于二叉树的先序遍历,从指定的顶点开始,访问该顶点后继续访问该顶点的逻辑上下一层的第一个顶点,以此类推直到不存在下一层的顶点,那就返回倒数第二层层的第二个顶点的位置继续重复以上操作,直到所有的顶点都被遍历。

199c62d681e8d209f14060db467c6797.png
DFS的一种情况
//图的深度优先遍历

有向图的应用:AOV网(Activity On Vertex Network)

一项大的工程经常被分为多个小的子工程,多个子工程之间可能存在一定的先后顺序,也就是说某些子工程必须在其他子工程完成后才能开始。因此,在现代化管理中,人们常用有向图来描述和分析一项大工程的计划和实施过程,子工程被称为活动(Activity),在有向图中用顶点来表示,有向边表示活动之间的向后关系,这样的图结构称为AOV网。

结构:

标准的AOV网结构是一个有向无环图。

d7feea2098b10839fde015fbc7b89b5c.png

拓扑排序:

将AOV网中的所有顶点按活动的发生顺序排成一个序列,该序列一定满足活动发生的先后顺序,但同一优先级的活动的顺序不一定。比如说下图的排序结果是ABCDEF或者ABDCEF。

16ec141832cec50daa19319912ccf7c4.png

用卡恩算法实现AOV网的拓扑排序:

28e407190a6850eb5ecf129ffc5170c0.png

算法实现(仅仅体现思路)

//假定之前写的Graph就是AOV结构

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

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

相关文章

人类附身机器人获得永生_脑机接口先驱尼古莱利斯:人类无法实现数字永生

科幻作品中的意念控制、心灵感应,甚至数字“永生”,会通过脑机接口技术得以实现吗?脑机接口技术先驱者之一、杜克大学神经工程学教授米格尔尼古莱利斯(Miguel Nicolelis)表示,不可能。近日,尼古莱利斯在巴西家中与北京…

linux内核分成如下五个子系统,linux内核主要由5个子系统 Linux内核由哪几个子系统组成?...

1, Linux内核由哪几个子系统组成?Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时&…

HDU 1213 How Many Tables【并查集】

解题思路:和畅通工程类似,问最后还剩下几个不连通的区域。 How Many Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 15086 Accepted Submission(s): 7364 Problem Description…

LeetCode 1799. N 次操作后的最大分数和(回溯 / 状态压缩DP)

文章目录1. 题目2. 解题2.1 错误解2.2 回溯超时解2.3 回溯通过2.4 状态压缩DP1. 题目 给你 nums ,它是一个大小为 2 * n 的正整数数组。 你必须对这个数组执行 n 次操作。 在第 i 次操作时(操作编号从 1 开始),你需要&#xff1…

pytorch argmax_轻松学Pytorch使用ResNet50实现图像分类

点击上方蓝字关注我们微信公众号:OpenCV学堂关注获取更多计算机视觉与深度学习知识Hello大家好,这篇文章给大家详细介绍一下pytorch中最重要的组件torchvision,它包含了常见的数据集、模型架构与预训练模型权重文件、常见图像变换、计算机视觉…

linux查看某进程cpu使用情况,linux中如何查看进程对应的cpu使用情况?

empty与isset的一点使用体会刚在做表单提交的时候,我想检验一下数据是否存在,并用var_dump函数看一下数据.首先看使用isset()的代码 //登录函数 function login(){ if(!isset($_POST) ...ASPxTreeList控件去根节点的新增修改操作(写在onCommandColumnButtonInitialize&lpar…

如何通过PHP将excel的数据导入MySQL中

在开发PHP程序时,很多时候我们会有将数据批量导入数据库的需求,如学生信息批量添加到数据库中,而事先用excel编排好,对excel实行操作,便是我们比较常用的选择方式。 在对excel的操作中,phpExcelReade便是很…

LeetCode 1800. 最大升序子数组和

文章目录1. 题目2. 解题1. 题目 给你一个正整数组成的数组 nums &#xff0c;返回 nums 中一个 升序 子数组的最大可能元素和。 子数组是数组中的一个连续数字序列。 已知子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;若对所有 i&#xff08;l < i < r&a…

html使用js的变量_2、温故而知新,再学一遍JavaScript-html中如何使用JS

温故而知新&#xff0c;再学一遍JavaScripthtml中使用JavaScript有两种方式&#xff1a;通过中使用src属性引入外部JS文件,同时又在其内部嵌入JavaScript 代码&#xff0c;则嵌入的代码会被忽略。关于”字符串当浏览器遇到字符串""时就会认为代码块已经结束&#xff…

修改字段类型_PostgreSQL 关于字段类型的修改 谣言与止谣

​PostgreSQL 在9.2 之前是要面临一个指责&#xff0c;就是在更改字段类型的时候带来的不堪&#xff0c;假象你有100万行的数据&#xff0c;其中一个字段是varchar(20) ,你想将其更改为 varhcar(30), 这可能就要造成一个灾难&#xff0c;熟悉postgresql 原理的人们&#xff0c;…

用户 'IIS APPPOOL\***' 登录失败(转载)

用户 IIS APPPOOL\DefaultAppPool 登录失败。 我在windows8中安装了iis之后添加了我做的网站打开之后提示用户 IIS APPPOOL\DefaultAppPool 登录失败。 我再vs2010中能正常运行 最佳答案 这是设置iis应用程序池的设置问题。我就遇到了这样的问题。 比如我的网站取名myweb…

完全相同的4个小矩形如图所示放置_吸睛!矩形在PPT中的创意表现

如何在PPT中表现出光效来&#xff1f;这是很多人在制作PPT时都可能会面临的问题&#xff0c;大多数人的常规做法就是在许多素材网站中直接寻找&#xff0c;比如在花瓣中直接搜索"光效"&#xff0c;我们可以得到以下结果&#xff1a;这些光效PNG文件可以直接用在我们的…

LeetCode 1801. 积压订单中的订单总数(map)

文章目录1. 题目2. 解题1. 题目 给你一个二维整数数组 orders &#xff0c;其中每个 orders[i] [pricei, amounti, orderTypei] 表示有 amounti 笔类型为 orderTypei 、价格为 pricei 的订单。 订单类型 orderTypei 可以分为两种&#xff1a; 0 表示这是一批采购订单 buy1 …

quantaxis 云服务器_量化金融策略开源框架:QUANTAXIS

简介&#xff1a; QUANTAXIS量化金融策略框架,是一个面向中小型策略团队的量化分析解决方案&#xff0c;是一个从数据爬取、清洗存储、分析回测、可视化、交易复盘的本地一站式解决方案。QUANTAXIS量化金融策略框架,是一个面向中小型策略团队的量化分析解决方案&#xff0c;是一…

linux 中文 音乐播放器,linux下的常见音乐播放器

xmms老牌的音乐播放器&#xff0c;模仿Windows下*的播放器Winamp&#xff0c;其强大的功能不输于Winamp&#xff0c;具有极强的可扩展性&#xff0c;支持mp3、ogg、wav等格式播放&#xff0c;添加插件后还可以播放AAC、wma等格式。缺点&#xff1a;没有曲库功能&#xff0c;不支…

listrecord根据某个属性去重_去哪网开发实战记录(9):城市选择页(中)

兄弟组件之间的联动所谓的兄弟组件之间的联动&#xff0c;其实就是实现点击右侧的字母就能跳转至对应的首字母城市&#xff0c;因此列表组件需要知道右侧的字母列表的点击事件所对应的元素字母&#xff0c;这就需要兄弟组件间的数据传递了(Alphabet组件与List组件之间的通信)&a…

Windows Store App 获取文件及文件夹列表

通过使用13.2.1小节给出的方法和属性&#xff0c;不仅可以对用户库中的文件和文件夹进行操作&#xff0c;还可以获取其中所有的文件或者文件夹&#xff0c;比如为了完整地展现整个音乐库&#xff0c;可以获取并列举出音乐库中所有的音乐文件&#xff0c;以便能够在应用程序中浏…

写接口是什么意思啊_科普贴:果汁包装上写NFC到底是什么意思?

比起水果&#xff0c;果汁省去了繁杂的处理步骤&#xff0c;选对了能更快地补充营养。今天麦德龙美厨课堂就为大家推荐METRO Chef NFC100%果汁系列&#xff0c;给你真材实料、原汁原味的营养美味。NFC果汁&#xff1a;真材实料 原汁原味如今果汁饮品市场上品类繁杂&#xff0c;…

LeetCode 1802. 有界数组中指定下标处的最大值(思维题)

文章目录1. 题目2. 解题1. 题目 给你三个正整数 n、index 和 maxSum 。 你需要构造一个同时满足下述所有条件的数组 nums&#xff08;下标 从 0 开始 计数&#xff09;&#xff1a; nums.length nnums[i] 是 正整数 &#xff0c;其中 0 < i < nabs(nums[i] - nums[i1]…

Linux单用户能做什么,Linux单用户模式详解 及应用场景

一、单用户模式简介二、进入单用户模式修改密码1、Centos6进入单用户修改密码1、重启系统&#xff0c;进入系统欢迎界面按上下左右键进入GRUB界面&#xff1b;2、在GRUB界面选择内核版本&#xff0c;按下e键&#xff1b;3、在此界面可以进行编辑&#xff0c;在最后输入single再…