第七章 图 Graph
7.1 图的定义和术语
顶点 Vertex
V 是顶点的有穷非空集合,顶点数 |V| = n
VR 两个顶点之间关系的集合,边数 |VR| = e
有向图 Digraph
<v, w> Arc
v Tail / Inital node
w Head / Terminal node
无向图 Undigraph
<v, w> 必有 <w, v> Edge
完全图(Completed graph):有 n(n-1)/2 条边的无向图
有向完全图:有 n(n-1) 条弧的有向图
稀疏图(Sparse graph):很少边或弧,如 e < nlogn
稠密图(Dense graph)
权(Weight):边或弧的相关数
子图(Subgraph):
邻接点(Adjacent):,则称顶点 v 和 v' 互为邻接点
,则称顶点v邻接到顶点v',顶点v'邻接自顶点v
依附(Incident):边依附于顶点 v 和 v',或者说 相关联。
度(Degree):顶点v相关联的边数,记为
入度(InDegree):以顶点v为头的弧数,
出度(OutDegree):以顶点v为尾的弧数,
路径(Path):从顶点 v 到 v' 的一个顶点序列
环(Cycle):第一个顶点和最后一个顶点相同的路径
简单路径:序列中顶点不重复出现的路
简单回路 / 简单环:除第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路
连通:在无向图G中,如果顶点v 到顶点v' 有路径,则称v 和 v' 连通
连通图(Connected Graph):无向图中,任意两个顶点有路径
连通分量(Connected Component):无向图中的极大连通子图
强连通图:有向图G中,任意两个顶点之间有路径
强连通分量:有向图中,极大强连通子图
生成树:连通图的一个极小连通子图,包含全部顶点,n-1条边
如果一个图有n个顶点,小于n-1条边,则是非连通图。
如果大于n-1条边,一定有环。
有n-1条边的图不一定是生成树。
如果一个有向图恰有一个顶点入度为0,其余顶点入度均为1,则是一棵有向树。
生成森林:一个有向图的生成森林,由若干棵有向树组成,含图中全部顶点,最少条边。
图中的顶点不存在全序关系,即无法排成一个线性序列。
任何一个顶点都可以被看成是第一个顶点;任一顶点的邻接点之间也不存在次序关系。
7.2 图的存储结构
邻接矩阵、邻接表、邻接多重表、十字链表
7.2.1 邻接矩阵
7.2.2 邻接表
总在表头插入结点,所以邻接表的存储结构还与弧的输入顺序有关。
图的邻接表存储结构适合存储弧相对较少的稀疏图。
7.3 图的遍历
对图的搜索就是对图中顶点的遍历。
为了不重复访问顶点,需要为顶点向量设立一个访问标志数组visit[],并将初值置为FALSE,即未被访问。
遍历时,在访问后,将标志的值改为TRUE。
两种搜索原则:
- 深度优先搜索;
- 广度优先搜索。
7.3.1 深度优先搜索
7.3.2 广度优先搜索