数据结构:图;邻接矩阵和邻接表

 邻接矩阵:

1.概念:

邻接矩阵是图的存储结构之一,通过二维数组表示顶点间的连接关系。

2.具体例子 :

一.无向图邻接矩阵示例:

示例图(顶点:A、B、C,边:A-B、B-C):

邻接矩阵:A B C  
A 0 1 0  
B 1 0 1  
C 0 1 0  

特点

  1. 矩阵对称,主对角线为0(无自环边)。
  2. 顶点B的度为2,对应第2行/列非零元素数量。
  3. 非零元素总数=边数×2(无向图双向性)。

二、有向图邻接矩阵示例

示例图(顶点:V1→V2、V2→V3、V3→V1):

邻接矩阵:V1 V2 V3  
V1 0   1  0  
V2 0   0  1  
V3 1   0  0  

特点

  1. 矩阵不对称(边方向性)。
  2. V3的入度=1(第3列非零数),出度=1(第3行非零数)。

三、带权图(网)邻接矩阵示例

示例图(顶点:A、B、C,边:A-B权2,B-C权5):

邻接矩阵(∞表示无穷):A   B     C  
A 0   2     ∞  
B 2   0     5  
C ∞   5     0  

特点

  1. 权值替代0/1,主对角线仍为0。
  2. 对称性保留(无向网),稀疏图可能用压缩存储。

邻接表:

概念:

邻接表是图数据结构最常用的链式存储方式,通过数组与链表结合实现顶点与边的离散化存储。

  1. 组成结构
    • 顶点表(头节点表):一维数组存储顶点信息,每个元素包含顶点值和指向首个邻接点的指针。
    • 边表(链表节点):每个顶点对应的链表,存储其所有邻接点的索引(或地址)及边权重(网图)。例如顶点A的链表包含C,表示存在边AC。

示例图结构:

假设存在无向图如下(顶点:A、B、C、D;边:A-B、A-C、B-C、B-D、C-D):

 A 
/ \
B——C \ /D 

邻接表存储实现

1. 顶点表(顺序存储)

顶点表使用数组存储,每个元素包含顶点信息和指向邻接链表的指针:

顶点表索引 | 顶点数据 | 边表头指针 
---------------------------------
0         |   A     | → 1 → 2 → NULL 
1         |   B     | → 0 → 2 → 3 → NULL 
2         |   C     | → 0 → 1 → 3 → NULL 
3         |   D     | → 1 → 2 → NULL 
2. 边表(链表存储)

每个顶点的边表以链表形式存储邻接顶点(本例使用头插法):

  • 顶点A的邻接链表:B(索引1)、C(索引2)
  • 顶点B的邻接链表:A(索引0)、C(索引2)、D(索引3)
  • 顶点C的邻接链表:A(索引0)、B(索引1)、D(索引3)
  • 顶点D的邻接链表:B(索引1)、C(索引2)
// C语言实现(无向图)
typedef struct ArcNode {    // 边表节点 int adjvex;             // 邻接顶点索引 struct ArcNode *next;   // 指向下一邻接点 
} ArcNode;typedef struct VNode {      // 顶点表节点 char data;              // 顶点数据 ArcNode *firstarc;      // 指向第一个邻接点 
} VNode, AdjList[MAX_VERTEX];typedef struct {AdjList vertices;       // 顶点表数组 int vexnum, arcnum;     // 顶点数和边数 
} ALGraph;

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

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

相关文章

Kubernetes-master 组件

以下是Kubernetes Master Machine的组件。 etcd 它存储集群中每个节点可以使用的配置信息。它是一个高可用性键值存储,可以在多个节点之间分布。只有Kubernetes API服务器可以访问它,因为它可能具有一些敏感信息。这是一个分布式键值存储,所…

【第2章:神经网络基础与实现——2.1 前馈神经网络的结构与工作原理】

老铁们好!今天我们要来一场长达两万字的超详细技术探险,我会像拆解乐高积木一样把前馈神经网络(Feedforward Neural Network)的每个零件摆在台面上,用最接地气的方式让你彻底搞懂这个深度学习基石的工作原理。准备好了吗?我们开始吧! 第一章:神经网络的 “乐高积木” 1…

【云安全】云原生- K8S kubeconfig 文件泄露

什么是 kubeconfig 文件? kubeconfig 文件是 Kubernetes 的配置文件,用于存储集群的访问凭证、API Server 的地址和认证信息,允许用户和 kubectl 等工具与 Kubernetes 集群进行交互。它通常包含多个集群的配置,支持通过上下文&am…

【环境安装】重装Docker-26.0.2版本

【机器背景说明】Linux-Centos7;已有低版本的Docker 【目标环境说明】 卸载已有Docker,用docker-26.0.2.tgz安装包安装 1.Docker包下载 下载地址:Index of linux/static/stable/x86_64/ 2.卸载已有的Docker 卸载之前首先停掉服务 sudo…

字节跳动后端二面

📍1. 数据库的事务性质,InnoDB是如何实现的? 数据库事务具有ACID特性,即原子性、一致性、隔离性和持久性。InnoDB通过以下机制实现这些特性: 🚀 实现细节: 原子性:通过undo log实…

SpringBoot中使用MyBatis-Plus详细介绍

目录 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 2.定义Mapper(也叫dao)层的接口 3.MyBatis-Plus中常用注解 4. 使用MyBatis-Plus时要做如下配置 5.条件构造器 Wrapper 一、MyBatis-Plus的使用步骤 1.引入MybatisPlus的起步依赖 M…

vue3读取webrtc-stream 视频流

一.首先下载webrtc-stream&#xff0c;方便自己本地搭建视频流服务 https://download.csdn.net/download/cyw8998/90373521 解压后&#xff0c;启动命令 webrtc-streamer.exe -H 127.0.0.1:8020 二.vue3代码如下 <template><h1>video</h1><video id&…

vue3搭建实战项目笔记二

vue3搭建实战项目笔记二 2.1.git管理项目2.2.隐藏tabBar栏2.2.1 方案一&#xff1a;在路由元信息中设置一个参数是否显示tabBar2.2.2 方案二&#xff1a;通过全局设置相对定位样式 2.3.项目里封装axios2.3.1 发送网络请求的两种做法2.3.2 封装axios并发送网络请求2.3.2.1 对axi…

USC 安防平台之移动侦测

随着第四次科技革命的开启&#xff0c;AI技术获取了突飞猛进的发展&#xff0c;视频监控对应的视频分析技术也获取了巨大的发展。 还记得15年前采用人工提取特征做前景背景分离和提取&#xff0c;大部分依赖CPU&#xff0c;最多使用一下TI的DM642 DSP加速&#xff0c;开发难度…

Unity CommandBuffer绘制粒子系统网格显示

CommandBuffer是 Unity 提供的一种在渲染流程中插入自定义渲染命令的机制。在渲染粒子系统时&#xff0c;常规的渲染流程可能无法满足特定的渲染需求&#xff0c;而CommandBuffer允许开发者灵活地设置渲染参数、控制渲染顺序以及执行自定义的绘制操作。通过它&#xff0c;可以精…

【天地图】绘制、删除点线面

使用天地图绘制、删除点线面 实现效果图地图组件完整代码使用地图组件完整代码 实现效果图 地图组件完整代码 // 天地图组件 <template><div class"map-container"><div id"mapCon"></div></div> </template><scri…

Java八股文详细文档.2(基于黑马、ChatGPT、DeepSeek)

通过B站黑马程序员的八股文教学&#xff0c;自己也二刷了&#xff0c;结合ChatGpt、deepSeek总结了一下,Java八股文详细文档.2&#xff08;Redis篇和消息中间件篇&#xff0c;还没有写完&#xff0c;这只是一部分&#xff09; Java八股文详细文档.1&#xff08;包含JVM篇、数据…

简述 tsconfig.json 中 rootDir 和 include 之间的关系

tsconfig.json 中的 rootDir 和 include 之间有一定的关系&#xff0c;但它们的作用是不同的。理解它们的关系可以帮助你更好地配置 TypeScript 项目。 1. rootDir 的作用 rootDir 用于指定 TypeScript 编译器&#xff08;tsc&#xff09;的“根目录”。它的主要作用是&#x…

如何在Spring Boot中使用Profiles实现环境隔离

文章目录 如何在Spring Boot中使用Profiles实现环境隔离什么是Spring Profiles1.基本概念2.配置管理3.使用场景4.条件化配置5.优点Spring Profiles的基础知识1.Profile的定义2.配置文件3.激活Profiles4.条件化配置5.Profile的优先级与合并6.Profiles的最佳实践配置文件的组织1.…

SpringBoot使用TraceId日志链路追踪

项目场景&#xff1a; ??有时候一个业务调用链场景&#xff0c;很长&#xff0c;调了各种各样的方法&#xff0c;看日志的时候&#xff0c;各个接口的日志穿插&#xff0c;确实让人头大。为了解决这个痛点&#xff0c;就使用了TraceId&#xff0c;根据TraceId关键字进入服务…

微信小程序网络请求封装

微信小程序的网络请求为什么要封装&#xff1f;封装使用有什么好处&#xff1f; 封装的目的是为了偷懒&#xff0c;试想一下每次都要wx.request&#xff0c;巴拉巴拉传一堆参数&#xff0c;是不是很麻烦&#xff0c;有些公共的参数例如header&#xff0c;baseUrl是不是可以封装…

Element Plus table 去除行hover效果

需求&#xff1a; 给table的指定行设置高亮背景色且去除掉这些行的hover效果 思路&#xff1a; 给指定行设置css类名选择需要设置高亮的行的单元格&#xff0c;设置鼠标禁用属性让高亮行继承父元素的背景色 考虑到表格的第一列是勾选框&#xff0c;因此仅选择 tr 下除了第一…

认识vue-admin

认识vue-admin **核心交付:** 为什么要基于现成架子二次开发 什么是二次开发&#xff1a;基于已有的代码&#xff08;项目工程&#xff0c;脚手架&#xff09;开进行新功能的开发 所以看懂已有的框架中的既有代码&#xff0c;变得很重要了 1. 背景知识 后台管理系统是一种最…

无人机航迹规划:孟加拉虎优化( Savannah Bengal Tiger Optimization ,SBTO)算法求解无人机路径规划MATLAB

一、孟加拉虎优化算法 孟加拉虎优化&#xff08; Savannah Bengal Tiger Optimization &#xff0c;SBTO&#xff09;算法模拟了孟加拉虎的群体狩猎行为&#xff0c;采用了猎物搜索、隐身接近和攻击狩猎三种策略。 参考文献&#xff1a; [1]Yujing Sun, Xingguo Xu. Savann…

sib报错:com.*.xctrunner is not in your device!

1、问题描述 在使用sonic集成IOS设备的时候,我们需要通过sonic-agent服务去识别IOS设备。但是在识别的时候提示如下问题: 本质就是在你这个设备中找不到这个设备也就是找不到WebDriverAgentRunner,但是确实安装了,甚至appium可以正常的调用。 或执行如下命令的时候报错:…