第八章 图

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8.2 图的存储结构
8.2.1 图的邻接矩阵存储结构
基本思想:用一个一维数组存储图中顶点的信息,用一 个二维数组(称为邻接矩阵)存储图中各顶点之间的邻 接关系。 假设图G=(V,E)有n个结点,即V={v0,v1,…,vn-1},E可用 如下形式的矩阵A描述,对于A中的每一个元素aij,满足:
1
aij=
3 2 3 1 2 (a)
4 3 4 2 3


2
3
0
结点 图中的顶点称作结点,图中的第i个 结点记做vi。
边 两个结点vi和vj相关联称为结点vi和vj之
间有一条边,图中的第k条边记做ek,ek=(vi,
vj)或<vi,vj>。
简单图:在图中,若不存在顶点到其自身的边,且同
一条边不重复出现。 V2 V1 V1
V3 V4 非简单图 V3
V2
V1 V3
图的邻接表存储结构
A
data B 0 1
D
sorce 0 1 2 3 4
(b)
A B C D E
2 3
C
(a)
E
4
data 0 1 2 3 4 A B C D E
sorce 0 1 2 3 4
(b)
adj
dest next 4 3 2 1


4 1

∧ ∧
1
0 1
v0 v1 v2 v3 v4
1 0 1 0 0
V2
生成树
V1 V3
V2
V3 V4
V1 V3 V6 V5 V2
生成森林
V4 V1
V2
V5 V3 V7 V6
V7 V4
V5
V4
V5
简单路径:序列中顶点不重复出现的路径。 回路(环):第一个顶点和最后一个顶点相同的路径。 简单回路(简单环):除了第一个顶点和最后一个顶点 外,其余顶点不重复出现的回路。 V1
第八章
8.1 概述

8.2 图的存储结构
8.3 邻接矩阵图类
8.4 图的遍历 8.5 最小生成树 8.6 最短路径
本章主要知识点:
● 图的基本概念
● 图的存储结构,主要是邻接矩阵存储结构和邻
接表存 储结构
● 图的遍历,主要是深度优先算法和广度优先遍
历算法
● 最小生成树的基本概念,以及普里姆算法和克 鲁斯卡尔算法 ● 最短路径的基本概念,狄克斯特拉算法思想
A= 0 0 0 0 0 0 0 1
V1
V2
V3 V4
V3
V4
1 0 0 0
如何求顶点 i 的入度? 邻接矩阵的第 i 列元素之和。
有向图的邻接矩阵
V1
V2
V= V1 V2 V3 V4
V1 V2 V3 V4
0 1 1 0
A= 0 0 0 0 0 0 0 1
V1
V2
V3 V4
V3
V4
1 0 0 0
如何判断从顶点 i 到顶点 j 是否存在边? 测试邻接矩阵中相应位置的元素aij是否为1。
V1
V2
V3 V4
V2
V3
1 1 0 0
如何判断顶点 i 和 j 之间是否存在边?
测试邻接矩阵中相应位置的元素aij是否为1。
无向图的邻接矩阵
V1
V4
V= V1 V2 V3 V4
V1 V2 V3 V4
0 1 0 1
A= 1 0 1 1 0 1 0 0
V1
V2
V3 V4
V2
V3
1 1 0 0
如何求顶点 i 的所有邻接点?
V2
V5
V4 非简单图
V5
V4 简单图
V5
数据结构中讨论的都是简单图。
有向图 在有向图中,结点对<x ,y>是有
序的,结点对<x,y>称为从结点x到结点y的一
条有向边,因此,<x,y>与<y,x>是两条不 同的边。有向图中的结点对<x,y>用一对尖括 号括起来,x是有向边的始点,y是有向边的终 点,有向图中的边也称作弧.
i i
nห้องสมุดไป่ตู้
n
V3
V4
在具有n个顶点、e条边的有向图G中,各顶点 的入度之和与各顶点的出度之和的关系?与边
数的关系?
V1 V3 V4
V2
V1
V2
V5
V3
V4
※ 若一个图中有n个顶点和e条边,每个顶
点的度为di(1≤i≤n),则有:
e=
1
d 2
i=1
n
i
路径 在图G=(V,E)中,若从结点vi出发有一组边 可到达结点vj,则称结点vi到结点vj的结点序列为
V2
V1 V3
V2
V3
V4
V4
V5
8.1.2 图的抽象数据类型
数据集合:由一组结点集合{vi}和一组边{ej}集合组成。当为
带权图时每条边上权wj还构成权集合{wj}。 操作集合:
(1)初始化initiate(n):
(2)插入结点 insertVertex(vertex): (3)插入边insertEdge(v1, v2, weight): (4)删除边deleteEdge(v1, v2): (5)删除结点deleteVertex(vertex): (6)第一个邻接结点getFirstVex(v): (7)下一个邻接结点getNextVex(int v1, v2): (8)遍历depthFirstSearch(vs):
称边(u,v)依附于结点u和v。在有向图G中,
若<u,v>是E(G)中的一条边,则称结点u邻接
到结点v,结点v邻接自结点u,并称边<u,v> 与结点u和结点v相关联。
1
顶点的度:顶点v的度是与它相关联的边的条 数,记作TD(v)。
2 3 0
4 (a ) 1
顶点的入度:在有向图中,顶点v的入度是指以 该顶点为终点的有向边的数目,记为ID (v); 顶点的出度:在有向图中,顶点v的出度是指以
将数组中第 i 行元素扫描一遍,若aij为1,则顶点 j 为顶点 i 的邻接点。
有向图的邻接矩阵
V1
V2
V= V1 V2 V3 V4
V1 V2 V3 V4
0 1 1 0
A= 0 0 0 0 0 0 0 1
V1
V2
V3 V4
V3
V4
1 0 0 0
有向图的邻接矩阵一定不对称吗? 不一定,例如有向完全图。
无向图 在无向图中,结点对(x,y)是无序
的,结点对(x,y)称为与结点x和结点y相关联 的一条边。(x,y)等价于(y,x)。
完全图 在有n个结点的无向图中,若有n(n-
1)/2条边,即任意两个结点之间有且只有一条边,
则称此图为无向完全图。在有n个结点的有向图中,
若有n(n-1)条边,即任意两个结点之间有且只有方
2
3
0
该顶点为始点的有向边的条数,记为OD (v)。
TD (v)=ID (v)+OD (v)
4 (b )
V1
V2 V3
TD ( v ) = 2 e i =1
i
n
V4
V5
在具有n个顶点、e条边的无向图G中,各顶点
的度之和与边数的关系?
V1
V2
ID(v ) = OD(v ) = e i=1 i=1
3 V3
V1 V4:长度为8
V1 V2 V3 V4 :长度为7
5
6 V5
V1 V2 V5V3 V4 :长度为15
子图:若图G=(V,E),G'=(V',E'),如果V'V 且E' E ,则称图G'是G的子图。 V1 V3 V4 V5 V4 V2 V1 V1 V2
V3
V4
V3
V5
连通图:在无向图中,如果从一个顶点vi到另一个顶 点vj(i≠j)有路径,则称顶点vi和vj是连通的。如果图中 任意两个顶点都是连通的,则称该图是连通图。 连通分量:非连通图的最大连通子图称为连通分量。
V4
V= V1 V2 V3 V4
V1 V2 V3 V4
0 1 0 1
A= 1 0 1 1 0 1 0 0
V1
V2
V3 V4
V2
V3
1 1 0 0
如何求顶点i的度? 邻接矩阵的第i行(或第i列)非零元素的个数。
无向图的邻接矩阵
V1
V4
V= V1 V2 V3 V4
V1 V2 V3 V4
0 1 0 1
A= 1 0 1 1 0 1 0 0
8.1 概述
8.1.1 图的基本概念
图 是由顶点的有穷非空集合和顶点之间边
的集合组成,通常表示为:
G=(V,E)
其中:G表示一个图,V是图G中顶点的集 合,E是图G中顶点之间边的集合。
不同结构中逻辑关系的对比
A
B A B C
C
线性结构
D V1
E
F V2 V3
D
E
F
V4
V5
图结构 树结构 在线性结构中,数据元素之间仅具有线性关系;
1.含有最大顶点数;
2. 依附于这些顶点的所有边。
V1 V1 V3 V7 V4 V5 V6 V4 V3 V7 V6
V2
V2
V5
连通分量是对无向图的一种划分。
强连通图:在有向图中,对图中任意一对顶点vi 和vj (i≠j),若从顶点vi到顶点vj和从顶点vj到顶点vi均有路径 ,则称该有向图是强连通图。 强连通分量:非强连通图的最大强连通子图。
邻接表有两种结点结构:顶点表结点和边表结点。
data sorce adj
顶点表
dest
next
边 表
data:数据域,存放结点的数据元素。 score: 存储该结点在数组中的下标序号。 adj:指针域,该结点的邻接结点单链表的头指针。 dest:邻接点域,存储边的终点在数组中的下标。 next:指针域,指向边表中的下一个结点。
(b)
2 20 1 30 3 50 40 70 4 80
5
6
40 50 0 70 80 70 0 80 0


(a)
8.2.2 图的邻接表存储结构
图的邻接矩阵存储结构的空间复杂度? 如果为稀疏图则会出现什么现象? 假设图G有n个顶点e条边,则存储该图需要O(n2) 。 邻接表存储的基本思想:对于图的每个顶点vi,将所 有邻接于vi的顶点链成一个单链表,称为顶点vi的边 表(对于有向图则称为出边表),所有边表的头指 针和存储顶点信息的一维数组构成了顶点表。
V1 V1 V2
V3
V3 V4
V4
V2
生成树:n个顶点的连通图G的生成树是包含G中全
部顶点的一个最小连通子图。
含有n-1条边 多——构成回路 少——不连通
如何理解最小连通子图? 生成森林:在非连通图中,由每个连通分量都可以得
到一棵生成树,这些连通分量的生成树就组成了一个
非连通图的生成森林。
V1
向相反的两条边,则称此图为有向完全图。
含有n个顶点的无向完全图有多少条边?
含有n个顶点的有向完全图有多少条弧?
V1 V2 V1
V2
V3
V4
V3
含有n个顶点的无向完全图有n×(n-1)/2条边。
含有n个顶点的有向完全图有n×(n-1)条边。
邻接结点
在无向图G中,若(u,v)是
E(G)中的一条边,则称u和v互为邻接结点,并
带权图——路径上各边的权之和 V2 V1 V4:长度为1
V1 V2 V3 V4 :长度为3
V5 V1 V2 V5V3 V4 :长度为4
权 有些图的边附带有数据信息,这些附带的数据信
息称为权。第i条边的权用符号wi表示。
非带权图——路径上边的个数
路径长度:
2
带权图——路径上各边的权之和 V2
V1 8 V4 2
网图的邻接矩阵
网图的邻接矩阵可定义为: wij 若(vi, vj)∈E(或<vi, vj>∈E) aij= 2 7
0

否则且i=j
否则且i≠ j V= V1 V2 V3 V4
V1
5 V3
V2 A= V4
0 2 5 ∞ ∞ 0 ∞ ∞
8
∞ ∞ 0
8
7 ∞ ∞ 0
网图的邻接矩阵
1 2 3 V = 4 5 6 0 20 30 20 0 30 0 A= 40 50
在树结构中,结点之间具有层次关系;
在图结构中,任意两个顶点之间都可能有关系。
不同结构中逻辑关系的对比
A
B A B C
C
线性结构
D V1
E
F V2 V3
D
E
F
V4
V5
图结构 树结构 在线性结构中,元素之间的关系为前驱和后继;
在树结构中,结点之间的关系为双亲和孩子;
在图结构中,顶点之间的关系为邻接。
图的基本术语
从结点vi到结点vj的路径
V1 V2
V1 到V4的路径: V1 V4
V1 V2 V3 V4
V3
V4 V5
V1 V2 V5V3 V4
一般情况下,图中的路径不惟一。
权 有些图的边附带有数据信息,这些附带的数据信
息称为权。第i条边的权用符号wi表示。
非带权图——路径上边的个数
路径长度:
V1 V3 V4
有向图的邻接矩阵
V1
V2
V= V1 V2 V3 V4
V1 V2 V3 V4
0 1 1 0
A= 0 0 0 0 0 0 0 1
V1
V2
V3 V4
V3
V4 如何求顶点 i 的出度?
1 0 0 0
邻接矩阵的第 i 行元素之和。
有向图的邻接矩阵
V1
V2
V= V1 V2 V3 V4
V1 V2 V3 V4
0 1 1 0
若(vi, vj)∈E(或<vi, vj>∈E)
0
其它
无向图的邻接矩阵
V1
V4
V= V1 V2 V3 V4
V1 V2 V3 V4
0 1 0 1
A= 1 0 1 1 0 1 0 0
V1
V2
V3 V4
V2
V3
1 1 0 0
无向图的邻接矩阵的特点?
主对角线为 0 且一定是对称矩阵。
无向图的邻接矩阵
V1
相关文档
最新文档