数据结构课件第七章
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
定义为: A.Edge[ i ][ j ]=
Wij <vi, vj> 或(vi, vj)∈VR ∞ 无边(弧)
以有向网为例:
v1
5
N3
8 7
v6
9
6 1
v5 5
v2 4
v3
5 v4
顶点表: ( v1 v2 v3 v4 v5 v6 )
邻接矩阵:
∞∞ 5∞5∞∞∞ ∞77 ∞∞ ∞
N.Edge = ∞∞∞∞ ∞44∞ ∞∞ ∞∞ ∞
OD(Vi)=单链出边表中链接的结点数 I D( Vi ) =邻接点为Vi的弧个数
TD(Vi) = OD( Vi ) + I D( Vi ) 需遍历全表
邻接表的优点:
空间效率高;容易寻找顶点的邻接点;
邻接表的缺点:
判断两顶点间是否有边或弧,需搜索两结点对应的单 链表,没有邻接矩阵方便。
27
第28页/共98页
20
第21页/共98页
例2 :有向图的邻接矩阵
v1
A
v3
v2
顶点表:
( v1 v2 v3 v4 )
邻接矩阵:
0 10 01 0 v1
A.Edge = 0 0 0 0 v2
v4
0 0 0 10 v3
01 0 0 0 v4
注:在有向图的邻接矩阵中, 第i行含义:以结点vi为尾的弧(即出度边); 第i列含义:以结点vi为头的弧(即入度边)。
分析1:有向图的邻接矩阵可能是不对称的。 分析2:顶点的出度=第i行元素之和,OD( Vi )= A.Edge[ i ][j ]
顶点的入度=第i列元素之和。ID( Vi )= A.Edge[ j ][i ]
顶点的度=第i行元素之和+第i列元素之和, 即:TD(Vi)=OD( Vi ) + ID( Vi )
6. 邻接点、度、入度、出度
对于无向图来说,
假若顶点v和顶点w之间存在一条边,则称顶点v和w互为邻接点,边 (v,w)和顶点v,w相关联。 与顶点v相关的边或弧的数目称作顶点v的度。
对有向图来说,
从x到y有一条弧,则y邻接自x, 但x邻接到y。 x y <x ,y> 以顶点v为弧尾的弧的数目定义为顶点的出度;以顶点v为弧头的弧的数目定 义为顶点的入度。
例1(无向图邻接矩阵):
v1
v2
A
v3
v4
v5
顶点表:
( v1 v2 v3 v4 v5 )
v1 v2
A.Edge = v3
v4 v5
0 10 0 01 0 01 0 01 0 01 0 01 0 10 10 01 0 01 0 10 0 10 10 10 0
19
第20页/共98页
例1:
v1
v2
A
v3
A
BA
B
C D VE1
V2 C
D
E
FG H
V3
V4
I
K J
F V5 J
G
H
L
ML
MI
K
13
第14页/共98页
9.强连通图与强连通分量
在有向图中, 若对于每一对顶点vi和vj, 都存在一条从vi到vj和从vj到vi的路径, 则称 此图是强连通图。非强连通图的极大强连通子图叫做强连通分量。
v1
v⒉
V3
空间效率为O(n+2e)。 若是稀疏图(e<<n2),则比邻接矩阵表示法O(n2)省空间。
怎样计算无向图顶点的度?
TD(Vi)=单链表中链接的结点个数
: 分析2 在有向图中,邻接表中除了n个头结点外,只有e个表结点,空间效率为O(n+e)。
若是稀疏图,则比邻接矩阵表示法合适。
怎样计算有向图顶点的出度? 怎样计算有向图顶点的入度? 怎样计算有向图顶点Vi的度:
对稀疏图而言尤其浪费空间。
23
第24页/共98页
二、邻接表(链式)表示法
邻接表是图的一种链式存储结构,它对图中每个顶点建立一个单链表, 第i个单链表中的结点表示依附于顶点vi的边(对有向图是以顶点vi为尾的 弧),每个结点由三个域组成:邻接点域(adjvex)指示与顶点vi邻接的点 在图中的位置,链域(nextarc)指示下一条边或弧的结点,数据域(info) 存储和边或弧相关的信息(如权值)。
21
第22页/共98页
顶点表: 邻接矩阵:
A.Edge =
V0 v1 v2 v3 v4 v5 0 0 0 0 0 0 v0 1 0 0 1 0 0 v1 0 1 0 0 0 1 v2 0 0 1 0 1 1 v3 1 0 0 0 0 0 v4 1 1 0 0 1 0 v5
22
第23页/共98页
特别讨论 :网(即有权图)的邻接矩阵
18
第19页/共98页
一、邻接矩阵(数组)表示法
用两个数组分别表示数据元素的(顶点)的信息和(弧)的信息。
设图 A = (V, E) 有 n 个顶点, 则图的用于表示数据元素之间关系的邻接矩阵是一个 二维数组 A.Edge[n][n],定义为:
无 权 图
1, A.Edge [i][ j] 0,
如果< i, j > E 或者 (i, j) E 否则
11
第12页/共98页
12
第13页/共98页
8.连通图与连通分量
在无向图中, 若从顶点v1到顶点v2有路径, 则称顶点v1与v2是连通的。如果图中任意 一对顶点vi和vj(vi,vj∈V)都是连通的, 则称此图是连通图。若图为非连通图,则 图中各个极大连通子图叫做连通分量。
在非连通图中一定存在若干个极大连通子图(连通分量),每个子图 一定是一个连通图。这几个连通分量之间是互相独立,互不相关的。
在树形结构中,结点之间的关系实质上是层次关系,同层上的 每个结点可以和下一层的零个或多个结点(即孩子)相关,但只 能和上一层的一个结点(即双亲)相关(根结点除外)。
在图结构中,对结点(图中常称为顶点)的前趋和后继个数不 加限制的,即结点之间的关系是任意的。
2
第3页/共98页
7.1 图及其基本运算
7. 1 .1 图的抽象数据类型定义
若 V’ V 且 E’ E, 则称 图G’ 是 图G 的子图。
7
第8页/共98页
5. 完全图、稀疏图、稠密图
假设图中有n个顶点,e条边, 则
含有e=n(n-1)/2条边的无向图称作 完全图; 含有e=n(n-1)条弧的有向图称作 有向完全图; 除此之外:
若边或弧的个数e<nlogn,则称作 稀疏图, 否则称作 稠密图。
弧头: 弧的终点 弧尾: 弧的起点
弧 <V,w> 弧尾V
弧头w
由顶点集和弧集构成的图称为有向图。
A
B
E
C
D
4
第5页/共98页
2. 边、无向图
若<v,w> VR 必有<w,v> VR, 则称(v,w)为顶点v和顶点w之间存在一条边。 由顶点集和边集构成的图称为无向图。
B
A F
C D
E
双向的两 条弧构成 一条边
5
第6页/共98页
3. 网
权 某些图的边或弧具有与它相关的数, 称之为权。权
可以代表一个顶点到另一个顶点的距离,耗费等。
弧或边带权的图分别称为有向网或无向网。
1
1
2
45 625 8
3
3
4
7
(a) 无向网
2
A
B
4 13 5
C
(b)有向网
图 7-4 无向带权图和有向带权图
6
第7页/共98页
4.子图 子 图: 设有两个图 G=(V, E) 和 G’=(V’, E’)。
v4
v5
顶点表:
( v1 v2 v3 v4 v5 )
v1
A.Edge
=
v2 v3
v4
v5
0 10 0 01 0 01 0 01 0 01 0 01 0 01 01 01 0 01 0 10 0 10 10 10 0
分析1:无向图的邻接矩阵是对称的; 分析2:对于无向图来说,顶点i 的度=第 i 行 (列) 中1 的个数; 特别:完全图的邻接矩阵中,对角元素为0,其余全1。
V4
v1
v⒉
V3
V4
14
第15页/共98页
10. 生成树、生成森林
假设一个连通图有n个顶点和e条边,其中n个顶点和n-1条边构成一个极小连 通子图,称该极小连通子图为此连通图的生成树。
极小连通子图的特点: 在n-1条边中,去掉一条边,图就不是连通图;增加一条边,必然存在回
路。
15
第16页/共98页
(1)顶点定位运算 确定顶点v在图中的位置; (2)取顶点运算 求取图中第i个顶点; (3)求第一个邻接点运算 求图中顶点v的第一个邻接点; (4)求下一个邻接点运算 已知w为图中顶点v的某个邻接点,求 顶点w的下一个邻接点; (5)插入顶点运算 在图中增添一个顶点v作为图的第n+1个顶点, 其中n为插入该顶点前图的顶点个数; (6)插入弧运算 在图中增添一条从顶点v到顶点w的弧。 (7)删除顶点运算 从图中删除顶点v以及所有与顶点v相关联的 弧。 (8)删除弧运算 从图中删除一条从顶点v到顶点w的弧。
基本内容: 7.1 基本术语 7.2 存储结构 7.3 图的遍历 7.4 图的连通性问题 7.5 有向无环图及其应用 7.6 最短路径
1
第2页/共98页
图(Graph)是一种较线性表和树更为复杂的非线性结构。 是对结点的前趋和后继个数不加限制的数据结构,用来描述元素 之间“多对多”的关系。
在线性结构中,结点之间的关系是线性关系,除开始结点和 终端结点外,每个结点只有一个直接前趋和直接后继。
ADT Graph {
数据对象V:v是具有相同特性的数据元素的集合,称为顶点集。 数据关系 R:R={VR};
VR={<v,w>|v,w∈V 且 P(v,w), <v,w>表示从v到w的弧, 谓词P(v,w)定义了弧<v,w>的意义或信息.
}
3
第4页/共98页
7.1.2 图的基本术语
1若.弧<v、,w弧> 头V、R弧, 尾、有向图 则<v,w>表示从顶点v到顶点w的一条弧。称顶点 w为弧头,称顶点v为弧尾。
A
B
CD E
A
B
A
B
C
C
FG H
F
F
I
L
K J
M
J
J
L
M
L
M
一个连通图,可以存在若干极小连通子图或生成树。 一个非连通图,存在若干个连通分量,每个连通分量 的生成树的集合为此非连通图的生成森林。
A
B
C
F
D
E
G
H
J
L
M
I
K
16
第17页/共98页
7.1.3 图的基本运算 图的基本运算也包括查找、插入和删除。
度(TD)=出度(OD)+入度(ID)
10
第11页/共98页
7. 路径、路径长度、简单路径、简单回路 在图G=(V,{VR})中 若存在一个顶点序列Vp ,Vi1,Vi2,…,Vin,Vq, ,使得每相邻两个顶点一定有一条 边(Vp,Vi1),(Vi1,Vi2),…..,(Vin,Vq)(或弧)均属于VR,则称从顶点Vp到顶点Vq之 间存在一条路径,路径上边(或弧)的数目称作路径长度。 若序列中的顶点不重复出现,则称作简单路径; 若Vp= Vq,则称这条路径为回路。 除了第一个顶点和最后一个顶点外,其余顶点不重复出现的回路,称为简单回路。
24
第25页/共98页
例1:已知某网的邻接(出边)表,请画出该网络。
当邻接表 的存储结 构形成后, 图便唯一 确定!
1 64
5
80 2
25
第26页/共98页
例1:无向图的邻接表 邻接表
v1
v2
v3
v4
v5
0 v1
3
1 v2
4
2 v3
4
3 v4
4
4 v5
3
注:邻接表不唯一,因各个边结点的链入顺序是任意的。
17
第18页/共98页
wenku.baidu.com
7.2 图的存储结构
V1
V2
V4
图的特点:非线性结构(m :n )
V3
顺序存储结构:无!(多个顶点,无序可言)
V5
V6
但可用数组描述元素间关系。
链式存储结构: 可用多重链表
• 邻接表 • 邻接多重表 • 十字链表
设计为邻接矩 阵
重点介绍: 邻接矩阵(数组)表示法 邻接表(链式)表示法
例2:有向图的邻接表 邻接表(出边)
v1
v2 V1
2
1
3^
V2 ^
v3
v4 V3
3^
V4
0^
1^ 2 3 2 2
0^ 1^ 0^ 1^
逆邻接表(入边)
V1
3^
V2
0^
V3
0^
V4
2^
26
第27页/共98页
邻 接 表 存 储 法 的 特 点 :—它其实是对邻接矩阵法的一种改进 : 分析1 对于n个顶点e条边的无向图,邻接表中除了n个头结点外,只有2e个表结点,
8
第9页/共98页
例:判断下列4种图形各属什么类型?
无向 完全图
无向图(树)
有向图
n(n-1)/2 条边
G1的顶点集合为V(G1)={0,1,2,3} 边集合为E(G1)={(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)}
有向 完全图 n(n-1) 条边
9
第10页/共98页
讨论:邻接表与邻接矩阵有什么异同之处?
1. 联系:邻接表中每个链表对应于邻接矩阵中的一行, 链表中结点个数等于一行中非零元素的个数。
2. 区别: ① 对于任一确定的无向图,邻接矩阵是唯一的(行列
8∞8∞ ∞∞∞∞∞ ∞∞ 99 ∞∞∞∞ ∞55∞∞∞ ∞∞ 66 ∞∞∞∞ ∞ ∞5∞5 ∞∞ ∞ 3∞3 ∞ ∞∞∞∞∞ 1∞1 ∞
邻接矩阵法优点容:易实现图的操作,如:求某顶点的度、判断顶点之 间是否有边(弧)、找顶点的邻接点等等。
邻接矩阵法缺点n:个顶点需要n*n个单元存储边(弧);空间效率为O(n2)。