图的基本术语,邻接矩阵、邻接表表示方法

简介: 图的基本术语,邻接矩阵、邻接表表示方法

图的定义

图是一种与线性表和树相比更复杂的数据结构,在图形结构中,结构之间的关系可以是任意的,图中任意两个元素之间都可能相关

图(Graph)是由顶点的有穷非空集合顶点之间边的集合组成,通常表示为:G(V,E),其中G表示一个图,V是图G中顶点的集合,E是图中边的集合,顶点也就是树中的结点。

图的分类

无向边:若顶点vi到vj之间的边没有方向,则称这条边为无向边,用(vi,vj)表示。最多为n(n-1)/2条边。

有向边:若vi到vj之间有方向,称为有向边,则用<vi,vj>表示,最多有n(n-1)条

有向图的权

有些图或弧具有与它相关的数字,这种与图的边或弧相关的树叫做权(Weight)

这些权可以表示从一个顶点到另一个顶点的距离或耗费,这种带权的图通常称为网(Network)

子图

连通性

在无向图G中如果两个点之间有路径可以到达,则称这两个点是连通的。如果对于图中任意两个顶点都可以到达,则会称G为连通图。

邻接矩阵

图的邻接矩阵储存方法是用两个数组表示

一个一维数组存储图中顶点信息

一个二维数组(邻接矩阵)储存图中的边或者弧的信息

为1表示两个点是连通的

邻接矩阵

邻接矩阵储存的结构

typedef char VertexType;           //定义顶点类型
typedef int EdgeType;              //边上权值类型由用户定义
#define MAXVEX 100                 //最大顶点数
#define INFINITY 65535             //表示两个顶点不连通
typedef srtuct{
    VertexType vexs[MAXVEX];       //顶点表
    EdgeType arc[MAXVEX][MAXVEX];  //边表
    int numVertexes,numEdges;      //图中当前的顶点数和边数
}MGraph;

领接表

图中顶点用一个一维数组储存,当然顶点也可以用单链表储存,不过数组可以较容易地读取顶点信息。另外对于顶点数组中,每个数据元素还需要储存指向第一个邻接点地指针,以便于查找该顶点的边信息。

邻接表的存储的结构

typedef char VertexType;   //顶点类型
typedef int EdgeType;      //边的权值
typedef struct EdgeNode{   
    int adjvex;            //存储该顶点对应的下表
    EdgeType weight;       //用于储存权值,对于非网图不需要
    struct EdgeNode *next; //链域,指向下一个邻接点
}EdgeNode;

邻接矩阵储存的结构

typedef struct VertexNode{          //顶点表结构,就一个信息和一个尾巴
    VertexType data;               //顶点域,存储顶点信息
    EdgeNode *firstedge;            //边表头指针
}VertexNode,AdjList[MAXVEX];
typedef struct{
    AdjList adjList;             //结构体数组
    int numVertexes,numEdges;       //图中当前顶点数和边数     
}GraphAdjList;
相关文章
|
Web App开发
一文读懂锁相环基本原理
一文读懂锁相环基本原理
3354 0
一文读懂锁相环基本原理
|
Ubuntu Linux API
libusb简介及在Linux中安装libusb
最近做了关于在X86环境下通过FT232H芯片实现的USB转SPI的相关驱动,接触到了libusb。libusb是一个开源的用C实现的,应用程序与用户的USB设备进行通信的库。它是可移植的,对外使用统一的API,支持Windows、macOS、Linux、Android。它是用户模式(user-mode),应用程序与USB设备通信不需要高权限,但是在Android下好像有些接口需要root权限才能调用成功。它支持所有版本的USB协议。它的License是LGPL,源码地址在https://github.com/libusb/libusb,最新发布版本为1.0.23。
libusb简介及在Linux中安装libusb
|
运维 监控 安全
服务器运维
服务器运维
|
JSON 图形学 数据格式
unity使用TextMeshPro实现聊天图文混排
使用unity也能实现qq好友聊天效果
|
存储 Java
Java堆和栈的区别和介绍以及JVM的堆和栈
Java堆和栈的区别和介绍以及JVM的堆和栈 一、Java的堆内存和栈内存 Java把内存划分成两种:一种是堆内存,一种是栈内存。 堆:主要用于存储实例化的对象,数组。由JVM动态分配内存空间。一个JVM只有一个堆内存,线程是可以共享数据的。
7076 0
|
存储 机器学习/深度学习 人工智能
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
数据结构学习笔记——图的存储结构(邻接矩阵和邻接表)
|
异构计算
CCF推荐B类会议和期刊总结:(计算机体系结构/并行与分布计算/存储系统领域)
中国计算机学会(CCF)定期发布国际学术会议和期刊目录,为科研人员提供参考。本文总结了计算机体系结构、并行与分布计算、存储系统领域的CCF推荐B类会议和期刊,包括会议和期刊的全称、出版社、dblp文献网址及领域分类。会议涵盖了SoCC、SPAA、PODC等26项重要国际会议,期刊则包括TAAS、TODAES、TECS等9种权威期刊,为相关领域的研究者提供了宝贵的资源。
CCF推荐B类会议和期刊总结:(计算机体系结构/并行与分布计算/存储系统领域)
|
SQL 关系型数据库 MySQL
【超全整理】SQL日期与时间函数大汇总会:MySQL与SQL Server双轨对比教学,助你轻松搞定时间数据处理难题!
【8月更文挑战第31天】本文介绍了在不同SQL数据库系统(如MySQL、SQL Server、Oracle)中常用的日期与时间函数,包括DATE、NOW()、EXTRACT()、DATE_ADD()、TIMESTAMPDIFF()及日期格式化等,并提供了具体示例。通过对比这些函数在各系统中的使用方法,帮助开发者更高效地处理日期时间数据,满足多种应用场景需求。
2025 1
【Python 基础】如何将一个字符串转化为全大写和全小写?
【5月更文挑战第8天】【Python 基础】如何将一个字符串转化为全大写和全小写?
|
人工智能 自然语言处理 机器人
B端Agent的机会,不在于“助手”,而在基于垂直领域的任务式Agent微调
该文讨论了AI助手在企业服务中的应用,指出通用的“助手”Agent(如Coze、钉钉)在B端业务场景中表现一般,因为它们依赖用户正确指导且易发散。相比之下,任务式Agent(如TFlow)针对特定行业和场景进行微调,能更好地理解和执行复杂任务,具有更高准确性和稳定性,适合企业业务流程。TFlow的优势包括场景微调、优化流程处理,开发和使用成本较低,能直接解决实际业务问题。作者认为,B端Agent的机会在于为企业降低成本或增加效益,而任务式Agent通过微调形成的适配性成为其核心竞争力。