当前位置: 首页 > article >正文

图 、图的存储

图的基本概念:

图g由顶点集v和边集e组成,记为g=(v,e)

用|v|表示图g中顶点的个数,也称图g的阶,用|e|表示图g中边的条数

线性表可以是空表,树可以是空树,但图不可以是空,即v一定是非空集

一个图的顶点集不可以是空集,但是一个图的边集可以是空集

有向图:

若边是顶点的无序对,则图g为无向图

有向图:

若e是有向边的有限集合时,则图g为有向图

特殊概念:记作<v,w>  ,w称为弧头,v称为弧尾

简单图:

(1)不存在重复的边

(2)不存在顶点到自身的边

多重图:

图g中某两个结点之间的边数多于一条,又允许顶点通过同一条边和自己关联,则为多重图

(简单图和多重图也分为无向和有向)

度:

对于无向图:

顶点v的度是指依附于该顶点的边的条数,记为TD(v)

所有顶点的度之和为边的数量乘以2

对于有向图:

入度是以顶点v为终点的有向边的数目,记为ID(v);

出度是以顶点v为起点的有向边的数目,记为OD(v).

顶点的度等于其入度和初度之和

入度之和和出度之和相等,刚好为弧的条数

顶点与顶点的关系描述:

路径——顶点到顶点之间的一条路径是指顶点序列

回路——第一个顶点和最后一个顶点相同的路径称为回路或环

简单路径——在路径序列中,顶点不重复出现的路径称为简单路径

简单回路——除第一个顶点和最后一个顶点外,其余顶点不重复出现的回路称为简单回路

路径长度——路径上边的数目

点到点的距离——从顶点u出发到顶点v之间的最短路径若存在,则此路径的长度称为从u到v的距离。若从u到v根本不存在路径,则记该距离为无穷。

连通图、强连通图:

无向图中,若从顶点v到顶点w有路径存在,则称v和w是连通的

若任意两个顶点都是连通的,则称图g为连通图,否则为非连通图

(对于n个顶点的无向图g,若g是连通图,则最少有n-1条边)

有向图中,若从顶点v到顶点w和从顶点w到v之间都有路径,则称这两个顶点是强连通的

任意一对顶点都是强连通的,则称此图为强连通图。

(n个顶点最少边数为n条)

子图:若边集和顶点集为另外一个图的子集,则称该图为另一个图的子图

若顶点集为全集,则称该图为另一个图的生成子图

无向图中的极大连通子图称为连通分量

有向图中的极大强连通子图称为有向图的强连通分量

生成树:

在无向图中

连通图的生成树是包含图中全部顶点的一个极小的连通子图

生成森林:

在非连通图中,连通分量的生成树构成了非连通图的生成森林

边的权、带权图:

边的权——在一个图中,每条边都可以标上具有某种含义的数值,该数值称为该边的权值

带权图——边上带有权值的图称为带权图,也称网。

带权路径长度——当图是带权图时,一条路径上所有边的带权之和,称为该路径的带权路径长度

几种特殊形态的图:

无向完全图——无向图中任意两个顶点之间都存在边

有向完全图——有向图中任意两个顶点之间都存在方向相反的两条弧

稀疏图——边很少的图

稠密图——边很多的图

树——不存在回路,且连通的无向图

图的储存:

邻接矩阵法:

#define maxnum 10                    //顶点数目的最大值
typedef struct {          char vex[maxnum];                //顶点表int edge[maxnum][maxnum];        //邻接矩阵,边表int vexnum, arcnum;              //图的当前顶点数和边数/弧数
}mgraph;

(用0和1标记两个点之间是否存在边,故有向图和无向图之间不同)

求顶点的度,入度和出度:

(1)在有向图中:

只需检查行或列的1的个数即为度的大小

(2)在无向图中:

第i个结点的出度=第i行非零元素的个数

第i个结点的入度=第i列的非零元素的个数

第i个结点的度=第i行、第i列的非零元素个数之和

储存带权图需要用一个上限值来表示无穷,一般用0来表示指向自己的弧

#define maxnum 100;                   //顶点数目的最大值
#define INFINITY                      //宏定义常量“无穷”
typedef  char vertextype;             //顶点的数据类型
typedef  int edgetype;                //带权图中边上权值的数据类型
typedef struct {vertextype vex[maxnum];           //顶点edgetype edge[maxnum][maxnum];     //边的权int vexbun, arcnum;                //图的当前顶点数和弧数
}mgraph;

空间复杂度:O(|v|^2)——只和顶点数相关,和实际的边数无关

适合用于存储稠密图

无向图的邻接矩阵是对称矩阵所以只需存储上三角区或者下三角区进行压缩存储

邻接表法:

//用邻接表存储的图
typedef struct {adjlist vertices;int vexnum, arcnum;
}algraph;
//顶点
typedef struct vnode {vertextype data;       //顶点信息arcnode* first;        //第一条边/弧
}vnode,adjlist[maxnum];
//边/弧
typedef struct arcnode {int adjvex;                //边弧指向哪个结点struct arcnode* next;      //指向下一条弧的指针//Infotype info;           //边权值
}arcnode;

 空间复杂度O(|v|+2|e|);有向图O(|v|+|e|)

计算有向图的度、入度不方便

十字链表法(存储有向图)

(前面学过不是很懂)

邻接多重表(存储无向图)

无向图存储时用邻接表删除一个数据很不方便故用邻接多重表来储存无向图

相关文章:

图 、图的存储

图的基本概念&#xff1a; 图g由顶点集v和边集e组成&#xff0c;记为g&#xff08;v&#xff0c;e&#xff09; 用|v|表示图g中顶点的个数&#xff0c;也称图g的阶&#xff0c;用|e|表示图g中边的条数 线性表可以是空表&#xff0c;树可以是空树&#xff0c;但图不可以是空&…...

快速提升网站收录:利用网站新闻发布功能

本文转自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/63.html 利用网站新闻发布功能快速提升网站收录是一个有效的策略。以下是一些具体的建议&#xff0c;帮助你更好地利用这一功能&#xff1a; 一、保持新闻更新频率 搜索引擎尤其重视网站的…...

信息学奥赛一本通 2112:【24CSPJ普及组】地图探险(explore) | 洛谷 P11228 [CSP-J 2024] 地图探险

【题目链接】 ybt 2112&#xff1a;【24CSPJ普及组】地图探险&#xff08;explore&#xff09; 洛谷 P11228 [CSP-J 2024] 地图探险 【题目考点】 1. 模拟 2. 二维数组 3. 方向数组 在一个矩阵中&#xff0c;当前位置为(sx, sy)&#xff0c;将下一个位置与当前位置横纵坐…...

【数据结构】(4) 线性表 List

一、什么是线性表 线性表就是 n 个相同类型元素的有限序列&#xff0c;每一个元素只有一个前驱和后继&#xff08;除了第一个和最后一个元素&#xff09;。 数据结构中&#xff0c;常见的线性表有&#xff1a;顺序表、链表、栈、队列。 二、什么是 List List 是 Java 中的线性…...

YOLO11/ultralytics:环境搭建

前言 人工智能物体识别行业应该已经饱和了吧&#xff1f;或许现在并不是一个好的入行时候。 最近看到了各种各样相关的扩展应用&#xff0c;为了理解它&#xff0c;我不得不去尝试了解一下。 我选择了git里非常受欢迎的yolo系列&#xff0c;并尝试了最新版本YOLO11或者叫它ultr…...

Spring Boot 2 快速教程:WebFlux优缺点及性能分析(四)

WebFlux优缺点 【来源DeepSeek】 Spring WebFlux 是 Spring 框架提供的响应式编程模型&#xff0c;旨在支持非阻塞、异步和高并发的应用场景。其优缺点如下&#xff1a; 优点 高并发与低资源消耗 非阻塞 I/O&#xff1a;基于事件循环模型&#xff08;如 Netty&#xff09;&am…...

《OpenCV》——图像透视转换

图像透视转换简介 在 OpenCV 里&#xff0c;图像透视转换属于重要的几何变换&#xff0c;也被叫做投影变换。下面从原理、实现步骤、相关函数和应用场景几个方面为你详细介绍。 原理 实现步骤 选取对应点&#xff1a;要在源图像和目标图像上分别找出至少四个对应的点。这些对…...

20250202在Ubuntu22.04下使用Guvcview录像的时候降噪

20250202在Ubuntu22.04下使用Guvcview录像的时候降噪 2025/2/2 21:25 声卡&#xff1a;笔记本电脑的摄像头自带的【USB接口的】麦克风。没有外接3.5mm接口的耳机。 缘起&#xff1a;在安装Ubuntu18.04/20.04系统的笔记本电脑中直接使用Guvcview录像的时候底噪很大&#xff01; …...

fflush的概念和使用案例

fflush() 是C语言标准库中用于控制输入/输出缓冲区的函数&#xff0c;其主要功能是强制刷新缓冲区&#xff0c;确保数据及时写入目标设备&#xff08;如屏幕、文件&#xff09;。以下是其概念和典型使用场景&#xff1a; 概念 功能&#xff1a; 刷新指定流的缓冲区。对于输出流…...

2024年度总结

首先&#xff0c;我是在2023年结束高中生涯进入大学的&#xff0c;难免会有固化的“高中生”思维&#xff0c;我等着老师的安排&#xff0c;看着课表上课&#xff0c;跟着时间吃饭&#xff0c;睡觉&#xff0c;偶尔会熬夜&#xff0c;但整体跟高中没差太多。我对社团没兴趣&…...

The Simulation技术浅析(四):随机数生成

随机数生成技术 是 The Simulation 中的核心组成部分,广泛应用于蒙特卡洛模拟、密码学、统计建模等领域。随机数生成技术主要分为 伪随机数生成器(PRNG,Pseudo-Random Number Generator) 和 真随机数生成器(TRNG,True Random Number Generator)。 1. 伪随机数生成器(PR…...

如何生成强密码:提高网络安全性的全面指南

引言 在数字化时代&#xff0c;密码的安全性至关重要。随着我们在社交媒体、电子邮件、在线银行等平台上储存越来越多的个人信息&#xff0c;强密码的使用变得更加关键。强密码能有效防止暴力破解、字典攻击等安全威胁。因此&#xff0c;在本文中&#xff0c;我们将深入探讨如…...

结构体DMA串口接收比特错位

发送&#xff1a; 显示&#xff1a; uint16_t接收时候会比特错位。...

如何在Intellij IDEA中识别一个文件夹下的多个Maven module?

目录 问题描述 理想情况 手动添加Module&#xff0c;配置Intellij IDEA的Project Structure 问题描述 一个文件夹下有多个Maven项目&#xff0c;一个一个开窗口打开可行但是太麻烦。直接open整个文件夹会发现Intellij IDEA默认可能就识别一个或者几个Maven项目&#xff0c;如…...

基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 .…...

YOLOV11-1:YoloV11-安装和CLI方式训练模型

YoloV11-安装和CLI方式训练模型 1.安装和运行1.1安装的基础环境1.2安装yolo相关组件1.3命令行方式使用1.3.1 训练1.3.2 预测 本文介绍yoloV11的安装和命令行接口 1.安装和运行 1.1安装的基础环境 GPU环境&#xff0c;其中CUDA是12.4版本 1.2安装yolo相关组件 # 克隆github…...

用FormLinker实现自动调整数据格式,批量导入微软表单

每天早上打开Excel时&#xff0c;你是否也经历过这样的噩梦&#xff1f; 熬夜调整好的问卷格式&#xff0c;导入微软表单后全乱套 客户发来的PDF反馈表&#xff0c;手动录入3小时才完成10% 200道题库要转为在线测试&#xff0c;复制粘贴到手指抽筋 微软官方数据显示&#xf…...

Pluto固件编译笔记

前段时间我已经做到在电脑上交叉编译一个简单的c/c程序&#xff0c;然后复制到pluto上运行。 要做到这一点&#xff0c;其实参考adi pluto官网的wiki就能做到了。 但这样有几个问题&#xff0c;只能做到简易程序&#xff0c;如果程序复杂&#xff0c;要调用更多库而SYSROOT里…...

Docker Hub 镜像 Pull 失败的解决方案

目录 引言一、问题二、原因三、解决方法四、参考文献 引言 在云原生技术火热的当下&#xff0c;Docker可谓是其基础&#xff0c;由于其简单以及方便性&#xff0c;让开发人员不必再为环境配置问题而伤脑筋&#xff0c;因为可将其看作一个虚拟机程序去理解。所以掌握好它可谓是…...

弄懂Runable,Callable,Future之间的关系

JDK1.5之前&#xff0c;我们创建线程有这样两种方式 1.继承Thread类 2.连接实现Runnable接口 但是这两个方法我们都没有返回值&#xff0c;如果需要获取任务返回结果怎么办&#xff1f; 然后在JDK1.5之后&#xff0c;官方就提供了Callable和Future&#xff0c;有获取任务返…...

Kafka中文文档

文章来源&#xff1a;https://kafka.cadn.net.cn 什么是事件流式处理&#xff1f; 事件流是人体中枢神经系统的数字等价物。它是 为“永远在线”的世界奠定技术基础&#xff0c;在这个世界里&#xff0c;企业越来越多地使用软件定义 和 automated&#xff0c;而软件的用户更…...

Shell $0

个人博客地址&#xff1a;Shell $0 | 一张假钞的真实世界 我们已经知道在Shell中$0表示Shell脚本的文件名&#xff0c;但在有脚本调用的情形中&#xff0c;子脚本中的$0会是什么值呢&#xff1f;我们通过下面的实例来看。 已测试系统列表&#xff1a; Mac OS X EI Capitan 1…...

Hugging Face GGUF 模型可视化

Hugging Face GGUF 模型可视化 1. Finding GGUF files (检索 GGUF 模型)2. Viewer for metadata & tensors info (可视化 GGUF 模型)References 无知小儿&#xff0c;仙家雄霸天下&#xff0c;依附强者才是唯一的出路。否则天地虽大&#xff0c;也让你们无路可走&#xff0…...

使用istio实现权重路由

istio概述 **概述&#xff1a;**Istio 是一个开源的 服务网格&#xff08;Service Mesh&#xff09;解决方案&#xff0c;主要用于管理、保护和监控微服务架构中的服务通信。它为微服务提供了基础设施层的控制功能&#xff0c;不需要更改应用程序的代码&#xff0c;从而解决服…...

小程序项目-购物-首页与准备

前言 这一节讲一个购物项目 1. 项目介绍与项目文档 我们这里可以打开一个网址 https://applet-base-api-t.itheima.net/docs-uni-shop/index.htm 就可以查看对应的文档 2. 配置uni-app的开发环境 可以先打开这个的官网 https://uniapp.dcloud.net.cn/ 使用这个就可以发布到…...

基于 NodeJs 一个后端接口的创建过程及其规范 -- 【elpis全栈项目】

基于 NodeJs 一个后端接口的创建过程及其规范 一个接口的诞生&#xff1a; #mermaid-svg-46HXZKI3fdnO0rKV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-46HXZKI3fdnO0rKV .error-icon{fill:#552222;}#mermaid-sv…...

【hot100】刷题记录(8)-矩阵置零

题目描述&#xff1a; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2…...

C语言教学第三课:运算符与表达式

一、课程导入 同学们&#xff0c;上节课我们学习了变量和数据类型&#xff0c;这些是C语言的基础。今天&#xff0c;我们将继续深入学习C语言中的运算符与表达式。运算符是C语言中用于执行各种操作的符号&#xff0c;而表达式则是由变量、常量和运算符组成的有意义的组合。通过…...

一文讲解Spring中应用的设计模式

我们都知道Spring 框架中用了蛮多设计模式的&#xff1a; 工厂模式呢&#xff0c;就是用来创建对象的&#xff0c;把对象的创建和使用分开&#xff0c;这样代码更灵活。代理模式呢&#xff0c;是用一个代理对象来控制对真实对象的访问&#xff0c;可以在访问前后做一些处理。单…...

springboot集成钉钉,发送钉钉日报

目录 1.说明 2.示例 3.总结 1.说明 学习地图 - 钉钉开放平台 在钉钉开放文档中可以查看有关日志相关的api&#xff0c;主要用到以下几个api&#xff1a; ①获取模板详情 ②获取用户发送日志的概要信息 ③获取日志接收人员列表 ④创建日志 发送日志时需要根据模板规定日志…...