图 、图的存储

news2025/2/5 2:43:34

图的基本概念:

图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|)

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

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

(前面学过不是很懂)

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

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

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

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

相关文章

【数据结构】(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; …

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

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

结构体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…

Pluto固件编译笔记

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

弄懂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;而软件的用户更…

Hugging Face GGUF 模型可视化

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

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

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

【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…

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

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

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

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

优选算法的灵动之章:双指针专题(一)

个人主页&#xff1a;手握风云 专栏&#xff1a;算法 目录 一、双指针算法思想 二、算法题精讲 2.1. 查找总价格为目标值的两个商品 2.2. 盛最多水的容器 ​编辑 2.3. 移动零 2.4. 有效的三角形个数 一、双指针算法思想 双指针算法主要用于处理数组、链表等线性数据结构…

PyQt4学习笔记1】使用QWidget创建窗口

目录 一、创建一个简单的 QWidget 窗口 二、设置窗口属性 1. 设置窗口标题 2. 设置背景颜色 3. 设置窗口大小和位置 4. 设置窗口模式 5. 关闭窗口 6. QWidget 及其子控件的样式 三、添加控件到 QWidget 1. 添加按钮 2. 添加标签 3. 添加文本框 4. 控件布局管理 四、自定义样式 …