一、邻接矩阵
构造一个二维矩阵M = {mi, j}。
如果图是无权图,那么仅需要表示边的邻接关系。这时每个元素mi, j的取值只能是0或1:

如果图是有权图,那么还需要表示边权。权值有时候会取0,所以表示方法改成:

当用邻接矩阵表示无向图时,需要同时添加有向边<i, j>和<j, i>,得到的邻接矩阵关于主对角线对称。
二、邻接表
每个节点至少包含当前节点的编号和下一个节点的指针。每个节点的指针都指向邻接节点。邻接节点的存储是无序的,要查找一个节点的某个邻接节点,就要从该节点开始一直沿下一个节点的指针访问到目标节点或下一个节点的指针为空为止(此时代表未找到该邻接节点)。
也可以用向量数组来方便地保存邻接表。
对有权边,在下一个节点添加一个元素,用于保存权。对有的题目,可以只用邻接表保存邻接关系,而用额外的数组去存储每条边的权。
三、链式前向星
这是一种比较新的图的表示方法。前向星是一种特殊的边数组。我们把边数组{<u, v>n}中的每一条边先后按照起点u、终点v排序,并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,就完成了前向星的构造。
但是这个过程需要用到快排,使得时间复杂度为O(n log n) 。为了免去排序进而减小时间复杂度,我们采用链式前向星来记录一个图。
链式前向星至少要求一个head(有的资料写作first)数组和一个边数组e。边用结构体表示,至少包含终点、下一个储存位置两个元素。对有权图,边的结构体中要添加一个元素表示权。
添加边<u, v>时,需要指

本文详细介绍了图的三种表示方法:邻接矩阵适用于无权或有权图,邻接表节省空间适合稀疏图,链式前向星则是无排序的高效表示。对于稠密图,邻接矩阵更优;而稀疏图则推荐使用邻接表或链式前向星。链式前向星在某些情况下比邻接表更快。
最低0.47元/天 解锁文章
868

被折叠的 条评论
为什么被折叠?



