算法-图的存储,图的转置,拓扑排序

news2024/11/23 19:58:52

1.图的存储
图用来对关系建模.图是节点和边构成的集合.节点反映图的元素集合,边反映图的元素集合中元素间的关系.
在这里插入图片描述
上述是由五个节点,三条边构成的结构.我们可以用图对其建模.

对由节点,边构成的集合采用图结构表示时候,我们可以有两种基本选择,这两种基本选择引出图结构两种基本存储方式:邻接表存储,矩阵存储.

(1). 邻接表存储
我们依次存储图中每个节点,对节点间关系采用邻接表方式.
针对上述实例,具体为:

#include <stdio.h>
#include <stdlib.h>
template<class EdgeInfo>
class AdjNode{
public:
    AdjNode* m_pNext = nullptr;
    EdgeInfo m_stInfo;
    int m_nId;
};
template<class T, class EdgeInfo>
class Node{
public:
    T m_stEle;
    AdjNode<EdgeInfo>* m_pList = nullptr;
};
int main(){
    Node<int, int> stNodes[5];
    AdjNode<int> stAdjNode[3];
    stAdjNode[0].m_nId = 2;
    stAdjNode[0].m_stInfo = 11;
    stAdjNode[1].m_nId = 1;
    stAdjNode[1].m_stInfo = 14;
    stAdjNode[2].m_nId = 1;
    stAdjNode[2].m_stInfo = 12;
    stNodes[0].m_pList = &stAdjNode[0];
    stNodes[3].m_pList = &stAdjNode[1];
    stNodes[4].m_pList = &stAdjNode[2];
}

这种表示方法下,通过节点可以找到以该节点为起点的所有边的信息.
(2). 矩阵存储
我们依次存储图中每个节点,对节点间关系采用矩阵方式存储.
针对上述实例,具体为:

#include <stdio.h>
#include <stdlib.h>
template<class T>
class Node{
public:
    T m_nEle;
};
template<class EdgeInfo>
class Edge{
public:
    bool m_bValid = false;
    EdgeInfo m_stInfo;
};
int main(){
    Node<int> stNodes[5];
    Edge<int> stEdges[5][5];
    stEdges[0][2].m_bValid = true;
    stEdges[0][2].m_stInfo = 11;
    stEdges[4][1].m_bValid = true;
    stEdges[4][1].m_stInfo = 12;
    stEdges[3][1].m_bValid = true;
    stEdges[3][1].m_stInfo = 14;
}

这种表示方法下,通过矩阵来存储所有边的信息.

(3). 总结
当图的边的数量较少时,采用邻接表方式,比较节省空间.
当图的边的数量较多时,采用矩阵方式,有助于快速定位边的信息和存在性.

2.图的转置
即逆转图中的关系.
针对上述实例,转置处理后示意图如下:
在这里插入图片描述
3.拓扑排序
(1). 定义
拓扑排序是对一个有向无环图的顶点进行排序的过程。这个排序的目的是将图中的所有顶点排成一个线性序列,使得对于图中的任意一对顶点uv,如果存在一条从uv的边,那么u在线性序列中的位置就出现在v之前。这样的线性序列被称为满足拓扑次序的序列,简称拓扑序列。

拓扑排序在计算机科学和图论中具有重要的应用。它常被用来确定一个依赖关系集中,事物发生的顺序。例如,在一个工程项目中,各个子工程(或任务)之间可能存在一定的依赖关系,即一个子工程必须在另一个子工程完成后才能开始。通过拓扑排序,我们可以得到一个合理的子工程执行顺序,从而确保项目能够顺利进行。
(2). 实例
拓扑排序的一个实例可以是一个课程安排的场景。假设我们有一个学校的课程安排,其中一些课程是其他课程的前置课程,也就是说,在修读某些课程之前,必须先完成其他特定的课程。我们可以将这些课程看作有向无环图中的顶点,而将前置课程关系看作图中的有向边。

例如,假设我们有以下课程及其前置课程关系:
课程A是课程B的前置课程.
课程B是课程C和课程D的前置课程.
课程C是课程E的前置课程.
这可以表示为以下的有向无环图:
在这里插入图片描述
现在,我们想要对这些课程进行拓扑排序,以确定一个学生可以按照该顺序完成所有课程的合理学习路径。使用拓扑排序算法,我们可以得到以下的一个可能的拓扑序列:A -> B -> C -> D -> E
(3). 算法实现
a. 创建一个队列,并将所有入度为0的顶点加入队列,一个存储拓扑排序结果的集合。
b. 当队列非空时,循环执行以下步骤:
b.1. 从队列中取出一个顶点。
b.2. 将其添加到结果集合尾部。
c.2. 对于该顶点的所有邻接顶点,将其入度减1。如果入度变为0,则将该邻接顶点加入队列。
c. 如果图中还有顶点未被输出,则图中存在环,无法进行拓扑排序.否则,算法结束.

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

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

相关文章

TeXLive 2023+TeXstudio下载与安装

一. TeXLive 2023下载与安装 TeX Live 是一种 Tex 语言的发行版本,就是相当于 C 语言的编辑(VisualC++),但是这种编辑器的操作方式比较复杂,需要在 cmd 中输入命令操作,没有软件界面,而 Texstudio 正好解决了这个问题。清华大学镜像文件:https://mirrors.tuna.tsinghua…

Linux内核有什么之块设备驱动有什么第二回 —— 块设备驱动初始化流程 vs 字符设备驱动初始化流程

接前一篇文章&#xff1a;Linux内核有什么之块设备驱动有什么第一回 —— 概述及框架 本文内容参考&#xff1a; 34 | 块设备&#xff08;上&#xff09;&#xff1a;如何建立代理商销售模式&#xff1f;-趣谈Linux操作系统-极客时间 Linux内核——块设备总结_linux do_open-…

探索人工智能的现状与未来:机遇与挑战

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;日常聊聊 ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 正文 人工智能的现状 人工智能的应用领域 人工智能的未来 人工智能面临的挑战 我的其他博客 正文 人工智能&#xff08;AI&#xff09…

空间计算综合指南

空间计算&#xff08;spatial computing&#xff09;是指使人类能够在三维空间中与计算机交互的一组技术。 该保护伞下的技术包括增强现实&#xff08;AR&#xff09;和虚拟现实&#xff08;VR&#xff09;。 这本综合指南将介绍有关空间计算所需了解的一切。 你将了解 AR、VR…

【yolov8和yolov5】用命令快速着手训练

文章目录 1.yolov81.1.创建conda环境1.2.下载代码和环境1.3.YOLOv8训练、自测和预测的代码及解释1.3.1. YOLOv8 训练代码&#xff1a;1.3.2.yolov8 自测代码&#xff1a;1.3.3.yolov8 推理代码&#xff1a;1.3.4.注意&#xff1a; 2.yolov52.1.创建conda环境2.2.下载代码和环境…

在项目管理中,如何更好地协同团队成员,提高团队合作效率?

在项目管理中&#xff0c;协同团队成员并提高团队合作效率是确保项目成功实施的关键。以下是一些建议&#xff0c;有助于更好地协同团队成员&#xff0c;提高团队合作效率&#xff1a; 一、明确角色与责任 为每个团队成员分配明确的角色和职责&#xff0c;通过制定详细的任务…

Kafka MQ 如何处理请求

Kafka MQ 如何处理请求 元数据请求 客户端怎么知道该往哪里发送请求呢? 客户端使用了另一种请求类型&#xff0c;也就是元数据 请求。这种请求包含了客户端感兴趣的主题列表。服务器端的响应消息里指明了这些主题 所包含的分区、每个分区都有哪些副本&#xff0c;以及哪个副…

基于java+springboot开发的计算机毕业设计网文论坛管理系统设计与实现【附源码】

基于javaspringboot开发的计算机毕业设计网文论坛管理系统设计与实现【附源码】 &#x1f345; 作者主页 央顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联…

HTML静态网页成品作业(HTML+CSS)——游戏战地介绍设计制作(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

视频AI方案:数据+算力+算法,人工智能的三大基石

背景分析 随着信息技术的迅猛发展&#xff0c;人工智能&#xff08;AI&#xff09;已经逐渐渗透到我们生活的各个领域&#xff0c;从智能家居到自动驾驶&#xff0c;从医疗诊断到金融风控&#xff0c;AI的应用正在改变着我们的生活方式。而数据、算法和算力&#xff0c;正是构…

Matplotlib中的子图:规划绘图的指南和工具

导 读 我最近从事一个项目&#xff0c;需要在 matplotlib 中进行一些微调的子图和叠加。虽然我对制作基本的可视化感到很舒服&#xff0c;但我很快发现我对子图系统的理解没有达到标准。于是回到基础知识&#xff0c;并花了一些时间阅读文档并在 Stack Overflow 上搜索相关示例…

算法-前缀和-562. 壁画

题目 思路 被毁掉的墙段一定只与一段还未被毁掉的墙面相邻只能从两头坏&#xff0c;因为如果从中间坏的话&#xff0c;毁掉的墙就和两段未被毁掉的墙面相邻了,画了的墙是坏不了的&#xff0c;只能坏没有画的墙结果为n/2 向上取整&#xff0c;求取总和最大值 代码 T int(inp…

一台GTX1080显卡的怪兽,我可不能错过这个机会!

标题&#xff1a;我花了30块钱买了一台电脑主机。 这个配置能赚钱吗&#xff1f; 1. 收购惊喜 那是一个阳光明媚的下午&#xff0c;我在水管修理店里闲逛。 突然&#xff0c;一位老顾客手里拿着一台旧电脑主机匆匆走了进来。 他说&#xff1a;“小王&#xff0c;你能帮我看看…

【Kimi帮我看论文(四)】TransE:Translating Embeddings for Modeling Multi-relational Data

一、论文信息 1 标题 Translating Embeddings for Modeling Multi-relational Data 2 作者 Antoine Bordes, Nicolas Usunier, Alberto Garcia-Durn, Jason Weston, Oksana Yakhnenko 3 研究机构 Universit de Technologie de Compigne – CNRS Heudiasyc UMR 7253 Compi…

绝地求生:PUBG官方公布2024工作计划

大家好&#xff0c;我是闲游盒。 首先今天官方公布了2024工作计划&#xff0c;下面我们一起来了解一下2024工作重点&#xff0c;官方提到的2点&#xff1a;一是通过对PUBG的维护和优化来改善线上服务的质量&#xff0c;二是为玩家们提供更加多姿多彩的游戏体验。我个人看完了全…

EMQX+InfluxDB+Grafana 构建物联网可视化平台

EMQXInfluxDBGrafana 构建物联网可视化平台 本文以常见物联网使用场景为例&#xff0c;介绍了如何利用 EMQ X MQTT 服务器 InfluxDB Grafana 构建物联网数据可视化平台&#xff0c;将物联网设备上传的时序数据便捷地展现出来。 在物联网项目中接入平台的设备数据和数据存储…

第0章 学习包介绍

一、考试介绍 二、考点分析 白盒测试、黑盒测试、面向对象测试、web测试&#xff1b;下午题考的概率很大&#xff1b; 上午题考点&#xff1a; 三、资料包 四、如何学习

揭秘小红书口碑营销策略,品牌营销总结

口碑营销&#xff0c;是品牌方获得消费者的必修课之一&#xff0c;尤其是在小红书平台上&#xff0c;毕竟小红书是精准消费者扎堆的地方。但是&#xff0c;小红书营销该怎么做才能保证展示率!怎么才能树立品牌方的正面形象&#xff0c;作为品牌方对这个问题还是比较模糊&#x…

【Java设计模式】十七、状态模式

文章目录 1、背景案例2、状态模式3、案例4、总结 1、背景案例 现要按钮控制电梯的四种状态&#xff1a;开门、关门、启动、停止。但每种状态的改变&#xff0c;可能受其他状态影响&#xff0c;如运行状态下&#xff0c;不能进行开门。写个普通实现&#xff1a; 定义电梯接口 …

项目管理系统推荐:打造高效团队协作!教育科技公司管理利器揭秘

教育科技行业是指利用先进的技术手段和教育理论&#xff0c;为教育提供更加高效、便捷、个性化的解决方案。新东方、学而思、高顿都是耳熟能详的教育科技公司。项目管理、团队协作都离不开项目管理系统。适合教育科技公司的项目管理系统&#xff0c;项目管理系统推荐。 常见的项…