数据结构课件第七章图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图的应用举例
例1 交通图(公路、铁路) 顶点:地点 边:连接地点的公路
例2 电路图 顶点:元件 边:连接元件之间的线路
例3 各种流程图 如产品的生产流程图 顶点:工序 边:各道工序之间的顺序 关系
ch7
V0
V1
V2
V3
V4
V0
V1
V2
V3
ch7
2.图的相关术语 有向图和无向图
在图中,若用箭头标明了边是有方向性的,则称这样的 图为有向图,否则称为无向图。
1
57
245
32
46
1
G1
3
6
G2
ch7
完全图、稠密图、稀疏图
无向完全图:在一个无向图中,如果任意两顶点都有一条直 接边相连接,则称该图为无向完全图。在一个含有n个顶点 的无向完全图中,有n(n-1)/2条边。
有向完全图:在一个有向图中,如果任意两顶点之间都有方 向互为相反的两条弧相连接,则称该图为有向完全图。在一 个含有n个顶点的有向完全图中,有n(n-1)条弧。
1
57
245
32
46
G1
顶点5的度:3 顶点2的度:4
1
3
6
G2
顶点2入度:1 出度:3 顶点4入度:1 出度:0
1
57
ch7
245
32
46
1
3
6
G1
G2
设图G的顶点数为n,边或弧数为e。则图中
所有顶点的度数和
n
di
= 2*e。(每条边对图的
i 1
所有顶点的度数都“贡献”2度)
在有向图中,所有顶点的入度之和等于出度
(Connected Graph),否则称为非连通图。
无向图中,极大的连通子图为该图的连通分量。显
然,任何连通图的连通分量只有一个,即它本身,而非
连通图有多个连通分量。
G2的两个
V0
V1
连通分量
V0
V1 V4
V2
V3
V4
V3
V2 V5
连通图G1
非连通图G2
强连通图、强连通分量
ch7
对于有向图来说,若图中任意一对顶点vi 和vj(i≠j) 均有从一个顶点vi到另一个顶点vj的路径,也有从vj到vi的路 径,则称该有向图是强连通图。有向图的极大强连通子图称
ch7
1、CreatGraph(&G,V,E)
按V和E的定义构造图G。
2、DestroyGraph(&G)
销毁图G。
3、LocateVex(G, u)
若G中存在顶点u,返回其在图中位置,否则返回-1。
4、GetVex(G, v)
在图中找到顶点v,并返回顶点v的相关信息,否则返回
空。
5、FirstAdjVex(G,v)
在图G1中,V0,V1,V2,V3 是简单路径; V0,V1,V2,V4,V1不是简单路径;在图G2中, V0,V2,V3,V0是简单回路;
V0
V1
V0
V1
V2
V3
V4
V2
V3
无向图G1
有向图G2
子图
ch7
若有两个图G和G',G=(V, E), G' =(V', E' ),
满足如下条件: V' V,E' E,即V'为V的子集,
稠密图、稀疏图:若一个图接近完全图,称为稠密图;称边 数很少的图为稀疏图。
2
2
1
3
无向完全图
1
3
有向完全图
ch7
度、入度、出度
在图中,一个顶点依附的边或弧的数目,称为该顶点的 度。在有向图中,以顶点V为起点的有向边数称为顶点V的 出度(Outdegree),以顶点V为终点的有向边数称为顶点V的 入度(Indegree),有向图中某个顶点的入度和出度之和称为 该顶点的度。
1 若(i,j)∈E(G)或〈i,j〉∈E(G) A[i][j]= 0 其它情形
若G是带权图,则邻接矩阵定义为: wij 若(i,j)∈E(G)或〈i,j〉∈E(G)
A[i][j]= 0 所在对角线上元素
∞ 其它情形 其中,wij表示边上的权值;∞表示大于所有边上权值的数。
例
V0
V1
ch7
0110
有向图 A=
0000 0001
V2
V3
1000
V0
V1
V2
B= 无向图
V3
V4
01010 10101 01011 10100 01100
V0 5 V3 7
3 6 8 V4
C=
V1 4 V2 9 无向网
0 3 6 5∞ 3 0 4 ∞∞ 6 4 08 9 5∞8 0 7 ∞∞ 9 7 0
ch7
和其它结构一样,图的基本操作也是查找、插入和删除。
但在操作中常常需要指出顶点在图中位置。
从图的逻辑结构的定义来看,图中的顶点之间不存在全
序的关系(即无法将图中顶点排列成一个线性序列),任何
一个顶点都可被看成是第一个;另一方面,任一顶点的邻接
点之间也不存在次序关系。但为了操作方便,我们需要将图
中顶点按任意的顺序排列起来(这个排列和关系E无关)。
E'为E的子集,称图G'为图G的子图(Subgraph) 。
例: (b) 是 (a) 的子图,(c) 图不是(a)的子图。
V0
V1
V2
V3
V4
V0
V1
V2
V3
V4
V0
V1
V3
(a)
(b)
(c)
ch7
连通图、连通分量
在无向图中,如果从一个顶点vi到另一个顶点vj (i≠j)有路径,则称顶点vi和vj是连通的。若图中任意 两个顶点都是连通的,则称此无向图为连通图
图通常有邻接矩阵、邻接表、邻接多重表和十 字链表等表示方法。
7.2.1 邻接矩阵
ch7
定义:在邻接矩阵表示中,除了用一维数组存放顶点本 身信息外,还用一个矩阵表示各个顶点之间的邻接关系。这 个矩阵称为邻接矩阵。
假设图G=(V, E)有n个确定的顶点,即V={v0,v1,…, vn-1} ,则表示G中各顶点相邻关系为一个n×n的矩阵,矩阵 的元素为 :
ch7
7.1 图的定义和术语
1.图的定义 定义:图(Graph)是由非空的顶点集合和一个描
述顶点之间关系(边或者弧)的集合组成。
其二元组定义为:
G=(V,E) V={vi| vi∈DataObject} E={(vi,vj)| vi, vj ∈V且P(vi, vj)} 其中,G表示一个图,V是图G中顶点的集合,E是 图G中边的集合。 集合E可以是空集,若E为空,则该图只有顶点而 没有边。
在无向图中,一条边(x,y)与(y,x)表示的结果相同, 用圆括号表示。例如:
G1=(V1, E1) 其中:V1={v0, v1, v2, v3, v4 } E1={(v0, v1), (v0, v3), (v1, v2), (v1, v4), (v2, v3), (v2, v4)}
V0
V1
V2
V3
V4
无向图G1
无序对(vi,vj): 用连接顶点vi、vj的 线段表示,称为无向
边;
ch7
在有向图中,一条边<x,y>与<y,x>表示的结果不相同,
用尖括号表示。<x,y>表示从顶点x出发向顶点y的边,x为始
点,y为终点,有向边也称为弧,x为弧尾,y为弧头,则
<x,y>表示为一条弧,而<y,x>表示y为弧尾,x为弧头的另一条
V0
V1
有序对<vi,vj> :
V2
V3
有向图G2
用以vi为起点、以vj为 终点的有向线段表示, 称为有向边或弧;
ch7
顶点、边、弧、弧头、弧尾
图中的数据元素vi称为顶点(Vertex );P(vi, vj)表示在顶
点vi和顶点vj之间有一条直接连线。
如果是在无向图中,则称这条连线为边(edge);边用顶 点的无序偶对(vi, vj)来表示,称顶点vi和顶点vj互为邻接点,
也是有向的,它是由若干条弧组成。
如图所示的无向图G1中,v0→v3→v2→v4与
v0→v1→v4是从顶点v0 到顶点v4 的两条路径,路径长
度分别为3和2。
V0
V1
wk.baidu.comV2
V3
V4
G1
V1 V0
ch7
回路、简单路径、简单回路 起点和终点相同的路径称为回路或者环(Cycle
)。序列中顶点不重复出现的路径称为简单路径。除 第一个顶点与最后一个顶点之外,其他顶点不重复出 现的回路称为简单回路。
在图G中增添一条从顶点v到顶点w的边或弧。 10、DelArc(&G, v, w)
在图中删除一条从顶点v到顶点w的边或弧。 11、DFS (G, v)
在图G中,从顶点v出发深度优先遍历图。 12、BFS (G,v)
在图G中,从顶点v出发广度优先遍历图。
ch7
7.2 图的存储结构
图是一种结构复杂的数据结构,表现在不仅各 个顶点的度可以千差万别,而且顶点之间的逻辑关 系也错综复杂。从图的定义可知,一个图的信息包 括两部分,即图中顶点的信息以及描述顶点之间的 关系(边或者弧)的信息。因此无论采用什么方法 建立图的存储结构,都要完整、准确地反映这两方 面的信息。
路径、路径长度
ch7
在无向图中,若存在一个顶点序列vp,vi1,vi2,…,vim,vq 使得(vp,vi1),(vi1,vi2),…, (vim,vq)都属于E(G),则称其 为顶点vp到顶点vq之间的一条路径(Path)。路径上边的 数目称为路径长度(Path length)。在有向图中,路径
边(vi, vj)依附于顶点vi与顶点vj。
在有向图中,用有序偶对<vi, vj>表示从顶点vi出发向顶
点vj的边,vi为始点,vj为终点。有向边也称为弧(arc),vi
为弧尾(tail)或初始点, vj为弧头(head)或终端点,则<vi, vj>
表示为一条弧,而<vj, vi>表示vj为弧尾、 vi为弧头的另一条
为强连通分量。显然,任何强连通图的强连通分量只有一个,
即它本身,而非强连通图有多个强连通分量。
V1
V0
V1
V0
V1
V0
V2
V3
强连通图G1
V2
V3
非强连通图G2
V2
V3
G2的两个强连 通分量
生成树、生成森林
ch7
所谓连通图G的生成树,是G的包含其全部n 个顶点, 且以最少的边数使其连通的一个极小连通子图。它必定包含
ch7
第七章 图
学习要点 理解图的基本概念及有关术语;熟悉图的各种存储结 构及其构造方法; 熟练掌握图的两种遍历(深度优先搜索和广度优先 搜索)的算法思想、步骤; 掌握构造最小生成树的方法,并理解算法; 理解用Dijkstra方法求解单源最短路径问题; 掌握求活动网络的拓扑排序的方法,并理解算法; 掌握求解关键路径的方法。
弧。 Vj
Vj
Vi 无向图
Vi
有向图
ch7
端点和邻接点
在一个无向图中,若存在一条边(vi,vj),则称vi和vj为此 边的两个端点,并称它们互为邻接点(adjacent).
在一个有向图中,若存在一条弧<vi,vj>,则称vi和vj为此 弧的初始点和终端点,称它们互为邻接点,称vj为vi得出边 邻接点,vi为vj的入边邻接点.
由此,所谓顶点在图中的位置指的是该顶点在这个人为
的随意排列中的位置(或序号)。同理可对某个顶点的所有
邻接点进行排队,在这个排队中自然形成了第1个或第k个邻 接点。若某个顶点的邻接点的个数大于k则称第k+1个邻接 点为第k个邻接点的下一个邻接点,而最后一个邻接点的下一 个邻接点为“空”。
图的基本操作
且仅包含G的n-1条边。
极小连通子图意思是:该子图是G 的连通子图,在该 子图中删除任何一条边,子图不再连通。
非连通图的生成树则组成一个生成森林。若图中有n个 顶点,m个连通分量,则生成森林中有n-m条边。
V0
V1
V0
V1
V0
V2
V3
V4
V2
V3
V4
V3
V1
V2
V4
连通图 G1
G1的生成树
2 1
45
之和:
n
n
ri ci
i 1
i 1
ri 为入度, ci为出度
ch7
边的权、网
与边有关的数据信息称为权(weight),权可 以代表一个顶点到另一个顶点的距离,耗费等。边
上带权的图称为网(network)。
1
1
3
45
6 2 58 3
2
4
7
(a) 无向网
2
A
B
4
1 35
C
(b)有向网
无向带权图和有向带权图
返回图中顶点v的第一个邻接顶点,若没有,返回空。
6、NextAdjVex(G,v,w)
返回v的相对于w的下一个邻接顶点,若w是v的最后一 个邻接点,则返回空。
ch7
图的基本操作
7、 AddVex(&G, v) 在图G中增添新顶点v。 8、 DelVex(&G, v)
在图G中,删除顶点v及所有和其相关的边或弧。 9、 AddArc(&G, v, w)
弧。
在例图如G:中,G2若=(V所2,有E2边) 都其是中无:向V2边={,v0,则v1称, vG2, 为v3}无向图; 在图G中,E2若={<所v0有, v边1 >都, <是v0有, v2向>边, <v,2,则v3称>,G<v为3,有v0向>}图; 在图G中,既有无向边又有有向边,则称G为混合图;
3 G1
ch7
路径:1,2,3,5,6,3
路径长度:5
简单路径:1,2,3,5
6
回路:1,2,3,5,6,3,1 简单回路:3,5,6,3
1
57
路径:1,2,5,7,6,5,2,3 路径长度:7
简单路径:1,2,5,7,6
32
4
6
回路:1,2,5,7,6,5,2,1 简单回路:1,2,3,1
G2
3、图的运算