数据结构:第六章 图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
typedef struct
而不包含关系映像
{ vextype vexs[MaxVexNum]; /*顶点表*/
adjtype arcs[MaxVexNum][MaxVexNum]; /*边表*/
} MGraph;
2
1
4
3
5
0 1 1 1 1
arcs 11
0 0
0 0
1 0
10
1 1 0 0 0
若图G中的每条边都是没有方向的,则称G为无向图。 边是顶点的无序对。记(v,w) v,w∈V,表示v-w.
二、术语
▪ 邻接顶点 若(u,v)是一条无向边,则称顶点u和v 互为邻接点,或称u和v相邻接。对于有向边<u,v>, 称顶点u邻接到顶点v,顶点v邻接自顶点u。
▪顶点的度 一个顶点v的度是与它相关联的边的条数。 对有向图有出、入度之分。顶点 v 的入度 是以 v 为终 点的有向边的条数; 顶点 v 的出度是以 v 为始点的有向 边的条数。顶点 v 的度等于其出、入度之和。
无向图的邻接矩阵是对称的,有向图的邻接矩阵 可能是不对称的。
▪ 在有向图中, 统计第 i 行 1 的个数可得顶点 i 的出度, 统计第 j 列 1 的个数可得顶点 j 的入度。
▪ 在无向图中, 统计第 i 行 (列) 1 的个数可得顶点i 的度。
网络的邻接矩阵
W (i, j), 如果 i ! j 且 < i, j E 或 (i, j) E
图的邻接表描述:
/*边表结点定义*/ typedef struct node { int adjvex; struct node *next; } edgenode;
/*顶点表结点*/ typedef struct { vextype vertex; edgenode *firstedge; } vexnode; vexnode ga[MaxVexNum];
▪图的连通 在无向图G中,若两个顶点vi和vj之间有 路径存在,则称vi 和vj 是连通的。若G中任意两 个顶点都是连通的,则称G为连通图。无向图中的 极大连通子图叫做连通分量。
强连通图与强连通分量 在有向图中, 若对于每一 对顶点vi和vj, 都存在一条从vi到vj和从vj到vi的路径, 则称此图是强连通图。有向图中的极大强连通子图 叫做强连通分量。
1 0 1 0 0
1 vexs 32
4 5
B
A
D
C
E
0 1 1 1 1
百度文库
arcs 00
0 0
0 0
0 0
10
0 1 0 0 0
0 0 0 0 0
A
v
exs
CB
D
E
2
20
1
40
5
70
4
30
50
3
80
6
20 30
20
40
arcs
30
40
50
50
70
80
70 80
路径长度:路径上边的数目。
完全图 对有n个顶点的图,若为无向图且边数为 n(n-1)/2,则称其为无向完全图;若为有向图且边数 为n(n-1) ,则称其为有向完全图。
子图 设有两个图 G=(V, E) 和 G′=(V ′, E′ )。若
V′ V 且 E ′ E, 则称 图G ′ 是 图G 的子图。
▪路径 在图G=(V,E) 中, 若存在一个顶点序列
vp1, vp2, …, vpm,使得(vi,vp1)、(vp1,vp2)、 ...、(vpm, vj)均属于E,则称顶点vi到vj存在一 条路径 。若一条路径上除了vi 和vj 可以相同外, 其余顶点均
不相同,则称此路径为一条简单路径。起点和终点相 同的路径称为简单回路或简单环。
1、无向图的邻接表
顶点数n 与边数关系:
边数
n 1, = n -1, > n -1.
非连通图
最小连通图,树或表 非连通图
具有回路的图, 当达到最大边数时, 为完全图
✓ 图的基本概念 ✓ 图的存储结构 ✓ 图的遍历 ✓ 生成树和最小生成树 ✓ 最短路径 ✓ 拓扑排序
6.1 图的基本概念
图是一种复杂的非线性结构。图中结点之间的关系是任 意的,即任意两个结点之间都可能有关系(“多对多” 关系)。
一、图定义
图G是由两个集合V,E组成,记作:G=( V, E ) , 其中:V = { x | x 某个数据对象} ,是顶点的非空有 限集合;E = {(x, y) | x, y V } ,是顶点之间关系的 有限集合,也叫做边(edge)集合。
分为:有向图与无向图
若图G中的每条边都是有方向的,则称G为有向图。有 向边也称为弧,是顶点的有序对,记:<v,w> v,w∈V,表示:v→w.称v为始点,w为终点。
A.Edge
[i][
j]
=
,
否则,但是 i != j
0, 对角线 i == j
邻接矩阵表示法中图的描述
#define MaxVexNum 100 /*图的顶点数*/
typedef char vextype; /*顶点的数据类型*/
typedef float adjtype; /*权值类型*/
仅为顶点数据映像
1
有错误!
2
v exs
3 4
5
6
二、邻接表 (Adjacency List)
类似于树的孩子链表示法。
方法:把同一个顶点发出的边链接在同一个边链表中, 链表的每一个结点代表一条边,叫做边结点,结点中 保存有与该边相关联的另一顶点的顶点下标 dest 和指 向同一链表中下一个边结点的指针 link。另外,每个 链表设一表头结点:存放顶点的值和指向第一个结点 的指针。并将所有表头结点存放在数组中。
一、邻接矩阵 (Adjacency)
用两个数组存储,一个记录各个顶点信息的顶 点表,还有一个表示各个顶点之间相邻关系的 二维数组,称邻接矩阵。
设图 A = (V, E)是一个有 n 个顶点的图,则图 的邻接矩阵是一个二维数组A .Edge[n][n],定 义:
A.Edge
[i
][
j]
1, 0,
如果 < i, j > E 或者 (i, j) E 否则
▪权 某些图的边具有与它相关的数, 称之为权。这种
带权图叫做网络。
▪权 某些图的边具有与它相关的数, 称之为权。这种
带权图叫做网络。
7
10 2
5 9
1
12
63
8
15
76
6
3
4
16
7
60
A
B 40 80 C
30
75
35
D
E
45
三、图的基本操作
建立图;图的遍历;插入新顶点;删除图中顶点; 查找;等。
6.2 图的存储结构