- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.1 图的定义和术
语
有向图 G1
A
B
无向图 G2
A
B
E
C
D
• 顶点:
A
B
• 有向边(弧)、弧尾或初 始结点、弧头或终止结点
A
B
• 有向图:G1 =(V1,A1) V1 = {A,B,C,D} A1 = {<A,B>, <A,C>, <C,D>, <D,A>}
C
• 顶点:
D
A
B
• 无向边或边
A
B
•无向图:G2 =(V2,A2) V2 = {A,B,C,D,E} A2 = {(A,B), (A,C),(B,D), (B,E),(C,E),(D,E)}
❖ 顶点的度 一个顶点v的度是与它相关联的边的条数。记作TD(v)。在
有向图中,顶点v的入度是以v为终点的有向边的条数, 记作 ID(v); 顶点 v的出度是以 v 为始点的有向边的条数, 记作OD(v)。
❖ 子图 设有两个图 G=(V, E) 和 G’=(V’, E’)。若 V’ V 且 E’ E, 则 称 图G’ 是 图G 的子图。
#define INFINITY
INT_MAX
#define MAX
20 //最大顶点数
typedef enum{ DG, DN, UDG, UDN} GraphKind;
typedef struct{
VertexType vexs[MAX];
//顶点数组
int
Edge[MAX][MAX]; //邻接矩阵
无向图G
A
B
EFG
H
IJ
K M
C
L D
无向图G的三个连通分量ABFG NhomakorabeaE
H
IJ
K
L
M
C
D
7.1 图的定义和术语
❖ 强连通图与强连通分量 在有向图中, 若对于每一对顶点vi 和vj, 都存在一条从vi到vj和从vj到vi的路径, 则称此图是强连 通图。非强连通图的极大强连通子图叫做强连通分量。
有向图G
❖ 简单路径 若路径上各顶点 v1,v2,...,vm 均不互相重复, 则称这样的路径 为简单路径。
❖ 回路 若路径上第一个顶点 v1 与最后一个顶点vm 重合, 则称这样的路 径为回路或环。
7.1 图的定义和术语
❖ 路径长度
非带权图的路径长度是指此路径上边的条数。 带权图的路径长度是指路径上各边的权之和。 ❖ 连通图与连通分量 在无向图中, 若从顶点v1到顶点v2有路径, 则称顶点 v1与v2是连通的。如果图中任意一对顶点都是连通的, 则称此图是连通 图。非连通图的极大连通子图叫做连通分量。
杂度是O(n2+e·n), 其中对邻接矩阵G.arcs的初始 化耗费了O(n2)的时间。
7.2 图的存储结构
7.2.2 邻接表 (Adjacency List)
❖ 无向图的邻接表: 把同一个顶点发出的边链接在同一个边链表中,链表
的每一个结点代表一条边,叫做边结点,结点中保存有 与该边相关联的另一顶点的顶点下标 adjvex 和指向同 一链表中下一个边结点的指针 nextarc。
▪ 顶点表:用数组的形式存放所有的顶点及对应的边链表
的头指针。
▪ 边链表:每条边用一个结点进行表示。同一个结点的所
有的边形成它的边结点单链表。
▪ 在邻接表的边链表中,各个边结点的链入顺序任意,视
边结点输入次序而定。
7.2 图的存储结构
VNode
顶点数组
ArcNode
data firstarc
adjvex
7.1 图的定义和术 语
❖ 完全图 若有 n 个顶点的无向图有 n(n-1)/2 条边, 则此图为完全 无向图。有 n 个顶点的有向图有n(n-1) 条边, 则此图为完全有向 图。
❖ 权 某些图的边具有与它相关的数, 称之为权。带权图叫做网。
7.1 图的定义和术语
❖ 邻接顶点 如果 (u, v) 是 E(G) 中的一条边,则称 u 与 v 互为邻接顶 点。
A
B
有向图G的两个强连通分量
A
B
C
D
C
D
7.1 图的定义和术语
生成树 一个连通图的生成树是它的极小连通子图,包含 连通图的全部n个顶点,但只有构成一棵树的n-1条边。
无向图G
A
B
E
H
无向图G的生成树
A
B
E
H
M
C
D
M
C
D
7.2 图的存储结构
7.2.1 邻接矩阵 (数组表示法)
❖ 在图的邻接矩阵表示中,有一个记录各个顶点信 息的顶点表,还有一个表示各个顶点之间关系的 邻接矩阵。
列 1 的个数可得顶点 j 的入度。
7.2 图的存储结构
▪ 网(带权的图)的邻接矩阵
W (i,j), 如i果 !j且 <i,j E或 (i,j) E A .Ed[i]gj[]e = , 否但 则i是 !, =j
0, 对角 i=线 j=
7.2 图的存储结构
▪ 用邻接矩阵表示图时,除了存储用于表示顶点间相邻关系 的邻接矩阵外,还需要一个数组存储顶点。表示形式为:
7.1 图的定义和术
语
❖ 路径 在图 G=(V, E) 中, 若从顶点 vi 出发, 沿一些边经过一些顶点 vp1, vp2, …, vpm,到达顶点vj。则称顶点序列 ( vi vp1 vp2 ... vpm vj ) 为从顶点vi 到顶点 vj 的路径。它经过的边(vi, vp1)、(vp1, vp2)、...、(vpm, vj)应是属于 E的边。
边链表 nextarc
7.2 图的存储结构
❖ 有向图可以建立邻接表和逆邻接表: 1)在有向图的邻接表中,第 i 个边链表链接的边都是 顶点 i 发出的边。也叫做出边表。 2)在有向图的逆邻接表中,第 i 个边链表链接的边都 是进入顶点 i 的边。也叫做入边表。
❖ 设图 A = (V, E)是一个有 n 个顶点的图,则图的邻 接矩阵是一个二维数组 A.edge[n][n],定义:
A .Ed [i]jg [ ] e 1 0 ,, 否 如 < i,则 果 j> E 或(i,者 j) E
❖ 无向图的邻接矩阵是对称的,有向图的邻接矩阵 可能是不对称的。
❖ 在无向图的邻接矩阵中, 统计第 i 行 (列) 1 的个数可得顶点i 的度。 ❖ 在有向图的邻接矩阵中, 统计第 i 行 1 的个数可得顶点 i 的出度,统计第 j
int
vexnum;
//顶点数
int
arcnum;
//边数
GraphKind
kind;
//图的类型
} Mgraph;
7.2 图的存储结构
▪ 算法7.1(P162)是在邻接矩阵存储结构MGraph上 对图的构造操作的实现框架,它根据图G的种类调 用具体构造算法。 若G是无向网,则调用算法7. 2(P162) ▪ 构造一个具有n个顶点和e条边的无向网G的时间复