5.2 图的存储及基本操作
来源:互联网 发布:vim c语言高亮 编辑:程序博客网 时间:2024/05/16 09:28
图的存储必须要完整、准确地反映顶点集和边集的信息。根据不同图的结构和算法,可以用不同的存储方式,但不同的存储方式将对程序的效率产生很大的影响,因此,所选的存储结构应适合于欲求解的问题。无论是有向图还是无向图,主要的存储方式都有两种:邻接矩阵和邻接表。前者属于图的顺序存储结构,后者属于图的链接存储结构。
5.2.1邻接矩阵表。
所谓邻接矩阵存储,就是用一个一维数组存储图中顶点的信息,用一个二维数组存储图中边的信息(即各顶点之间的邻接关系),存储顶点之间邻接关系的二维数组称为邻接矩阵。结点树为n的图G=(V,E)的邻接矩阵A是n*n的。将G的顶点编号为v1,V2,……,Vn。若(vi,vj)属于E,则A[i][j]=1,否则A[i][j]=0。对于带权图而言,若顶点vi和vj之间有边相连,则邻接矩阵中对应项存放着该边对应的权值,若顶点vi和vj不相连,则用无穷来表示这两个顶点之间不存在边。图的邻接矩阵存储结构定义如下:
#define MaxVertexNum 100//顶点数目的最大值typedef char VertexType;//顶点的数据类型typedef int EdgeType;//带权图中边上权值的数据类型typedef struct{ VertextType Vex[MaxVertexNum];//顶点表 EdgeType Edge[MaxVertexNum][MaxVertexNum];//临界矩阵,边表 int vexnum,arcnum;//图的当前顶点数和弧数}MGragh;
注意:
①在简单应用中,可以直接用二维数组作为图的邻接矩阵(顶点信息等均可省略)
②在邻接矩阵中的元素仅表示相应的边是否存在时,EdgeType可定义为值为0和1的枚举类型。
③无向图的邻接矩阵是对称矩阵,对规模特大的邻接矩阵可采用压缩存储。
④邻接矩阵表示法的空间复杂的为O(n^2),其中n为图的定点数|V|。
图的邻接矩阵存储表示法具有以下特点:
①无向图的邻接矩阵一定是 一个对称矩阵(并且唯一)。因此,在实际存储邻接矩阵时只需存储上(或下)三角矩阵的元素即可。
②对于无向图,邻接矩阵的第i行(或第i列)非零元素(或非无穷元素)的个数正好是第i个顶点的度TD(vi)。
③对于有向图,邻接矩阵的第i行(或第i列)非零元素(或非无穷元素)的个数正好是第i个顶点的出度OD(vi)(或入度ID(vi))。
④用邻接矩阵存储图,很容易确定图中任意两个顶点时间是否有边相连。但是,要确定图中有多少边,则必须按行、按列对每个元素进行检测,所花费的时间代价很大。这是用邻接矩阵存储图的局限性。
⑤稠密图适合使用邻接矩阵的存储表示。
⑥设图G的邻接矩阵为A,A^n的元素A^n[i][j]等于由顶点i到顶点j的长度为n的路径的数目。
- 5.2 图的存储及基本操作
- 图的存储及基本操作
- 图的邻接表存储及基本操作
- 环形队列的存储及基本操作
- 线性表的线性存储及基本操作
- 线性单链表的存储及基本操作(整理)
- MySQL数据库的基本操作及存储引擎
- 二叉树的链式存储结构及基本操作
- 存储过程的基本操作
- 图的基本操作及应用
- 数据结构编程笔记十八:第七章 图 图的邻接矩阵存储表示及各基本操作的实现
- 数据结构编程笔记十九:第七章 图 图的邻接表存储表示及各基本操作的实现
- 邻接表存储的图的基本操作c++
- 邻接矩阵存储的图的基本操作c++
- 图的邻接矩阵存储结构基本操作的实现
- 图的数组(邻接矩阵)存储结构和基本操作
- 图的邻接表存储和基本操作
- 链式存储无向图的基本操作
- ST算法
- HTTP状态码
- nginx学习(十二)——nginx+lua入门
- Centos 6.5 Install KVM
- 文智背后的奥秘系列篇——情感分类
- 5.2 图的存储及基本操作
- iOS开发常用的宏
- 自定义xml解析框架
- activity与fragment中使用OnActivityResult方法
- Netty 初步介绍
- Android系统应用开发(八)ANR应用程序与无响应对话框自定义
- 用RNN拟合加法运算
- 从数据库获取数据插入页面
- mongoDB常用命令