图的定义
-
在线性表中,数据元素之间是被串起来的,仅有线性关系,每个数据元素只有一个直接前驱和一个直接后驱。
-
在树形结构中,数据元素之间有着明显的层次关系,并且每一层上的数据元素可能和下一层中的多个元素相关,但只能和上一层中一个元素相关。
-
图是一种较线性表和树更加复杂的数据结构。在图形结构中,结点之间的关系可以是任意的,图中任意两个数据元素之间都可能相关。
定义中注意事项: -
在图中数据元素,我们称之为顶点(Vertex)。
-
图结构中不允许没有顶点。
-
在图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边表示。
之后的术语其实记不记都无所谓,只有当真正用到的时候明白就好了,其实术语都是顾名思义的。
图定义——名词解释
- 无向边(Edge),用无序偶对(v1 ,v2)来表示,如果图中任意两个顶点之间都是无向边,则该图称为无向图(Undirected graphs)。
- 有向边:若从一个顶点到另一个顶点之间有方向,则称为有向边,也称为弧(Arc)。用有序偶<vi ,vj>来表示, vi称为弧尾(Tail),vj称为弧头(Head)。如果图中任意两个顶点之间的边都是有向边,则称该图为有向图(Directed graphs).
- 在图中,若不存在顶点到其自身的边,且同一条边不重复出现,则称这样的图为简单图。
- 无向完全图/有向完全图:任意两个顶点之间都存在边。
- 稠密图/稀疏图:顾名思义,边少的和边多的。
- 网(network):带权的图
图的顶点与边间关系
- 对于无向图 G = (V ,{E}),如果边 (v, v’) ∈ E,则称顶点 v 和 v’ 互为领接点 ,边( v,v’)依附于顶点 v 和 v’, 顶点 v 的度(Degree)是和 v 相关联的边的数目,记为 TD(v)。
- 对于有向图 G = (V ,{E}),如果 <v, v’> ∈ E ,则称顶点 v 邻接到 顶点 v’ ,以顶点 v 为头的弧的数目称为 v 的入度(InDegree),记为 ID (v),以 v 为尾的弧的数目称为 v 的出度 (Outdegree),记为 OD(v) ,顶点 v 的 度是出度与入度的和。
- 路径的长度是路径上的边或弧的数目。第一个顶点到最后一个顶点相同的路径称为回路或环。序列中顶点不重复出现的路径称为简单路径,除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单回路或简单环。
连通图相关术语
- 在无向图中,如果从顶点 v 到 顶点 v’有路径,则称 v 和 v’ 是联通的,如果对于图中任意两个顶点 vi , vj 都是连通的,则称 G 是连通的(Connected Graph)。
- 无向图中的极大连通子图称为连通分量。
- 要是子图
- 子图要是相连的
- 连通子图含有极大顶点数
- 具有极大顶点数的连通子图包含依附于这些顶点的所有边。
- 在有向图 G中,如果对于每一对 vi ,vj ∈ V ,vi 到 v j 和 从 v j 到 vi 都存在路径,则称 G 是强连通图。有向图中的极大强连通子图称作有向图的强连通分量。
- 无向图中连接 n 个顶点 n-1 条边叫生成树。有向图一顶点入度为 0 其余顶点入度为 1 的叫有向树。一个有向图有若干棵有向树构成生成森林。
图的抽象数据类型 重要
图的存储结构
图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在内存中的物理位置来表示元素之间的关系,也就是说,图不可能用简单的顺序存储结构来表示。
多重链表虽然可以实现,但如果各个顶点度数相差很大,按度数最大的顶点设计结点结构会造成很多存储单元的浪费,而按每个顶点自己的度数设计不同的顶点结构,又带来操作的不便。
所以有了以下的存储结构。
1.邻接矩阵
图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组来表示图。一个一维数组存储图中顶点信息,一个二维数组(邻接矩阵)存储图中的边或弧的信息。
设图 G 有 n 个顶点,则邻接矩阵是一个 n * n 的方阵,定义为:
实例,无向图用邻接矩阵后,图的边和顶点的度都很好表示。
有向图同样如此。
加入权值(网的表示):
邻接矩阵存储的结构,代码如下:
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */