1:
数据结构与算法

2:
报告人:XXX
目标
目标
素质培养
教师风貌
本章目标
图的概述

图的存储结构

图的遍历

最小生成树

3:
01
第一节 图的概述
The first chapter
内容展示

4:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:
图中的每一个元素我们称之为顶点(Vertex),并且图中的一个顶点可以与其他任意顶点建立连接关系,我们把这种建立的关系叫做边(Edge),
E
A
C
B
D
无向图
有向图

5:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:
由顶点(Vertex)集和边( Edge)集组成,
记为 G=(V,E),其中V 是有穷非空集合,称为顶点集,v ∈ V 称为顶点。E 是有穷集合,称为边集, e∈ E 称为边.
E
A
C
B
D
例如:G = (V, E)
其中
V={A, B, C, D, E}
E={<A,B>, <A,E>,<B,C>, <C,D>, <D,B>,<D,A>, <E,C> }

6:
目标

1 图的概述
1.1 图的基本概念
图的基本概念:
无向边
e =(u,v) =(v,u), 其中u,v ∈ V,
边(u,v)与边(v,u)是相同的。
无向图(Undirected Graph)
全部由无向边构成的图
0
1
3
4
2
无向图G1
例 G1=(V1, E1) V1={0,1,2,3,4} E1={(0,1),(1,2),(1,4),(2,3),(3,4)}
图的基本概念:

7:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:
例: G2=(V2, E2)
V2={v0, v1, v2, v3, v4}
E2={<v0, v1>,< v0, v2>, < v2, v3>,< v3, v0>,< v3, v4>}
v0
v1
v2
v3
v4
有向图G2
有向边
e =<u,v>, 其中u,v ∈ V,简称为弧(Arc)
其中u为始点(Initial Node)或弧尾(Tail),v为终点(Terminal Node)或弧头(Head)
边<u,v>与边<v,u>是不同的
有向图(Directed Graph)
全部由有向边构成的图

8:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:权
权(Weight):
在一个图中,每条边可以标上具有某种含义的数值,此数值称为该边上的权
通常权是一个非负实数
权可以表示从一个顶点到另一个顶点的距离、时间或代价等含义
网(Network)
边上标识权的图称为网
A
B
E
F
D
C
2
10
2
7
5
5
无向网G3
A
B
C
D
1
4
7
6
4
有向网G4

9:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:完全图
完全无向图中的每两个顶点之间都存在着一条边;完全有向图中的每两个顶点之间都存在着方向相反的两条边

0
1
3
2
完全无向图
A
C
B
完全有向图
假设图中有 n 个顶点,e 条边,则
完全无向图含有 e=n(n-1)/2 条边;
完全有向图含有 e=n(n-1) 条弧

10:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:稀疏图和稠密图
若边或弧的个数 e<nlog2n,则称作稀疏图,否则称作稠密图。
n:代表顶点数量
e:代表边的数量

11:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:子图
子图(Subgraph)
设有两个图G=(V, E)和G’=(V ’, E ’) ,若V ’是V 的子集,即V ’ ⊆ V ,并且E ’是E 的子集,即E ’ ⊆ E ,则称G’为G的子图,记为G’ ⊆ G 。
生成子图(Spanning Subgraph)
若G’为G的子图,并且V ’ = V ,则称G’为G的生成子图,即包含原图中所有顶点的子图。

12:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:子图

0
1
3
4
2
无向图G1
0
0
1
0
1
3
4
2
无向图G1
的生成子图
0
1
3
4
2
无向图G1
的生成子图

13:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:邻接点
无向图的邻接点(Adjacent)
在一个无向图中,若存在一条边(u,v),则称顶点u与v互为邻接点。边(u,v)是顶点u和v关联的边,顶点u和v是边(u,v)关联的顶点。
以顶点1为端点的3条边是(0,1),(1,2),(1,4),顶点1的3个邻接点分别为0,2,4;
0
1
3
4
2
无向图G1

14:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:邻接点
有向图的邻接点(Adjacent)
在一个有向图中,若存在一条弧< u,v >,则称顶点u邻接到v,顶点v邻接自u。弧< u,v >和顶点u、v关联。
顶点v0有2条出边<v0, v1>,< v0, v2>,1条入边< v3, v0 >,顶点v0邻接到v1和v2 ,顶点v0邻接自v3.
v0
v1
v2
v3
v4
有向图G2

15:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:顶点的度
顶点的度(Degree)
顶点的度是图中与该顶点相关联边的数目,记为D(v) 。
若一个图有n个顶点和e条边,则该图所有顶点的度之和与边数满足如下关系

16:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:无向图顶点的度
无向图顶点的度(degree)定义为以该顶点为一个端点的边的数目,即该顶点的边的数目,记为D(v) 。
e=5; n=5
D(0)=1;
D(1)=3;
D(2)=2;
D(3)=2;
D(4)=2;
0
1
3
4
2
无向图G1
=(1+3+2+2+2)/2=10/2=5=e

17:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:有向图顶点的度
有向图顶点的度
顶点v的入边数目是该顶点的入度(indegree),记为ID(v);
顶点v的出边数目是该顶点的出度(outdegree),记为OD(v);
顶点v的度等于它的入度和出度之和,即
D(v)=ID(v)+OD(v)

18:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:有向图顶点的度
v0
v1
v2
v3
v4
有向图G2
e=5 ; n=5
ID(v0)=1; OD(v0)=2;  D(v0)=3
ID(v1)=1; OD(v1)=0;  D(v1)=1
ID(v2)=1; OD(v2)=1;  D(v2)=2
ID(v3)=1; OD(v3)=2;  D(v3)=3
ID(v4)=1; OD(v4)=0;  D(v4)=1
=(3+1+2+3+1)/2=10/2=5=e

19:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:路径和回路
路径(Path)
在一个图中,路径是从顶点u到顶点v所经过的顶点序列,即(u=vi0, vi1, …, vim=v)。
路径长度是指该路径上边的数目。
回路:
第一个顶点和最后一个顶点相同的路径称为回路或环。
A
B
E
C
F

20:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:路径和回路
初等路径
序列中顶点不重复出现的路径称为初等路径
初等回路
除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路
A
B
E
C
F

21:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:路径和回路

v0
v1
v2
v3
有向图G5
3. 路径(v0, v2, v3, v0)是初等回路其路径长度为3
1.从顶点v0到顶点v1的一条路径 (v0, v2, v3, v1)是初等路径,其路径长度为3
2. 从顶点v0到顶点v1的另一条路径(v0, v2, v3, v0, v1),不是初等路径,其路径长度为4

22:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:网中的路径长度
网中的路径长度
在网中,从始点到终点的路径上各边的权值之和,称为路径长度
A
B
E
F
D
C
2
10
2
7
5
5
无向图G3
从顶点A到顶点E的一条路径 :( A, B , D, E )
路径长度为10+7+2=19

23:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:连通图和连通分量

若无向图G中任意两个顶点之间都有路径相通,则称此图为连通图;
若无向图为非连通图,则图中各个极大连通子图称作此图的连通分量。

B
A
C
D
F
E
A
B
L
C
M
H
E
F
K
G
I
D
J
连通图
非连通图

24:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:强连通图和强连通分量

若有向图中任意两个顶点之间都存在一条有向路径,则称此有向图为强连通图。
A
B
E
C
F
否则,其各个极大强连通子图称作它的强连通分量。
A
B
C
F
强连通图
非强连通图

25:
报告人:XXX
目标

1 图的概述
1.1 图的基本概念
图的基本概念:生成树
假设一个连通图有 n 个顶点和 e 条边,其中 n-1 条边和 n 个顶点构成一个极小连通子图,称该极小连通子图为此连通图的生成树。
B
A
C
D
F
E

26:
第二节:图的存储结构

The second chapter
内容展示
02

27:
报告人:XXX
2 图的存储结构
2.1 图的存储结构
目标

图的邻接矩阵:
图的邻接矩阵(Adjacency Matrix)
用来表示顶点之间相邻关系的矩阵。
假设图G=(V, E)具有n(n≥1)个顶点,顶点的顺序依次为{v0, v1, …, vn-1},则图的邻接矩阵A是一个n阶方阵

28:
报告人:XXX
2 图的存储结构
2.1 图的存储结构
目标

无向图的邻接矩阵:

0
1
3
4
2
无向图G1
无向图的邻接矩阵是对称的(可采用压缩存储)

顶点vi的度是第i行或第i列中“1“的元素个数。

29:
报告人:XXX
2 图的存储结构
2.1 图的存储结构
目标

有向图的邻接矩阵:
v0
v1
v2
v3
v4
有向图G2
有向图的邻接矩阵不一定为对称矩阵。

每一行中“1”的个数为该顶点的出度;每一列中"1"的个数为该顶点的入度。

30:
2 图的存储结构
2.1 图的存储结构
目标

网的邻接矩阵:
A
B
E
F
D
C
2
10
2
7
5
5

31:
报告人:XXX
2 图的存储结构
2.2 邻接表
目标

邻接表:
邻接表(Adjacency List)
是图的一种链式存储方法
由一个顺序存储的顶点表和n个链式存储的边表组成的
顶点表由顶点结点组成
边表是由边(或弧)结点组成的一个单链表,表示所有依附于顶点vi的边(对于有向图就是所有以vi为始点的弧)

32:
报告人:XXX
2 图的存储结构
2.2 邻接表
目标

邻接表-无向图:

无向图对应的邻接表某行上边结点个数为该行表示结点的度
0 A 1 4
1 B 0 4 5
2 C 3 5
3 D 2 5
4 E 0 1
5 F 1 2 3

B
A
C
D
F
E

33:
报告人:XXX
2 图的存储结构
2.2 邻接表
目标

邻接表-无向网:
1 9
A
B
E
F
D
C
2
9
2
7
5
5
0 A
1 B
2 C
3 D
4 E
5 F
2 7
3 2
2 9
0 2
3 2
5 5
4 2
3 7
5 5
2 5
4 5
如果无向图(网)中有e条边,则对应邻接表有2e个边结点

34:
报告人:XXX
2 图的存储结构
2.2 邻接表
目标

邻接表-有向图:
邻接表:边表表示所有以vi为始点的弧。

0 1 2 3 4
1 4

2
3
0 1
2

A
B
C
D
E





A
B
E
C
D
在有向图的邻接表中不易找到指向该顶点的弧。
有向图对应的邻接表某行上边结点个数为该结点的出度

35:
报告人:XXX
2 图的存储结构
2.2 邻接表
目标

邻接表-有向图:
逆邻接表:边表表示所有以vi为终点的弧。
有向图对应的逆邻接表某行上边结点个数为该结点的入度。
A
B
E
C
D
A
B
C
D
E
3
0
3
4
2
0





0

1

2

3

4
1

36:
报告人:XXX
2 图的存储结构
2.2 邻接表
目标

邻接表-有向网:
A
B
C
D
1
4
7
6
4
0 A
1 B
2 C
3 D
0 6
2 4
3 7
1 1
2 4
如果有向图(网)中有e条边,则对应邻接表有e个边结点

37:
报告人:XXX
2 图的存储结构
2.2 邻接表
目标

邻接表与邻接矩阵比较:

对于稀疏图,邻接表比邻接矩阵节省存储空间
邻接表上很容易找到任意一个顶点的邻接点和,但若要判定任意两个邻接点是否有边相连,则需遍历单链表,不如邻接矩阵方便

38:
报告人:XXX
2 图的存储结构
2.2 邻接表
目标

给出下图的邻接表和邻接矩阵:
v4
v1
v2
v3
v5
0 1 2 3 4
1 3

4
4
1
2

v1

v2

v3

v4

v5




0 2
1 3
0 2

39:
报告人:XXX
2 图的存储结构
2.2 邻接表
目标

给出下图的:
1)邻接矩阵
2)每个顶点的入/出度;
3)邻接表及逆邻接表
4)强连通分量

2
1
5
6
4
3

40:
第三节:图的遍历

The thirdchapter
内容展示
03

41:
报告人:XXX
3 图的遍历
3.1 图的遍历
目标

图的遍历描述:
图的遍历(Traversing Graph)
从图中的某个顶点出发,对图中的所有顶点访问且仅访问一次的过程。

广度优先搜索(Breadth First Search,BFS)
深度优先搜索(Depth First Search,DFS)

42:
报告人:XXX
3 图的遍历
3.1 图的遍历
目标

广度优先搜索算法BFS:
从图中的某个顶点v开始,先访问该顶点再依次访问该顶点的每一个未被访问过的邻接点 w1、w2、…
然后按此顺序访问顶点w1、w2、… 的各个还未被访问过的邻接点。
重复上述过程,直到图中的所有顶点都被访问过为止。
图的广度优先搜索遍历类似于树的层次遍历过程

43:
报告人:XXX
3 图的遍历
3.1 图的遍历
目标

广度优先搜索算法BFS:
v1
v0
v6
v3
v2
v4
v5
v7
访问次序:
v0
v1
v2
v3
v4
v5
v6
v7

44:
3 图的遍历
3.1 图的遍历
目标

广度优先搜索算法BFS:
访问次序:
V
w1
w8
w3
w7
w6
w2
w5
w4
v w1 w2 w8 w7 w3 w5 w6 w4

45:
报告人:XXX
3 图的遍历
3.1 图的遍历
目标

深度优先搜索算法DFS:
从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到。

46:
报告人:XXX
3 图的遍历
3.1 图的遍历
目标

深度优先搜索算法DFS:

v1
v0
v6
v3
v2
v4
v5
从顶点V0开始遍历
V0
V1
V4
V5
V6
V2
V3
V0
V2
V6
V1
V5
V4
V3
结束
结束
或:
注意:对于一个图,从某个顶点出发可得到多种搜索遍历结果,但如果是在特定存储结构上,按照某种特定搜索算法只能有一种唯一的遍历结果。

47:
报告人:XXX
3 图的遍历
3.1 图的遍历
目标

例1:已知一个图,若从顶点v1出发分别写出
按深度优先搜索法进行遍历和按广度优先搜索法进行遍历的一种可能得到的顶点序列。
V1
V2
V3
V4
V5
V6
深度优先搜索法遍历序列:
V1,V2,V3,V5,V6,V4
广度优先搜索法遍历序列:
V1,V2,V3,V4,V5,V6

48:
报告人:XXX
3 图的遍历
3.1 图的遍历
目标

例2:已知一个图的邻接表存储结构如下图,若从顶点v1出发分别写出有向图按深度优先搜索法进行遍历和按广度优先搜索法进行遍历的得到的顶点序列。
深度优先搜索法遍历序列:
V1,V2,V3,V5,V6,V4
广度优先搜索法遍历序列:
V1,V2,V3,V4,V5,V6
V1
V2
V3
V4
V5
V6
2
3
4
5
5





0

1

2

3

4

5
1
2
0
2
4

3
1
0
0

49:
第四节:最小生成树

The forth chapter
内容展示
04

50:
报告人:XXX
4 最小生成树
4.1 最小生成树的基本概念
目标

连通图的生成树(Spanning Tree):

是图的极小连通子图,它包含图中的全部顶点
是图的极大无回路子图,它的边集是关联图中的所有顶点而又没有形成回路的边
一个有n个顶点的连通图的生成树只能有n-1条边
图的生成树不是唯一的

51:
报告人:XXX
4 最小生成树
4.1 最小生成树的基本概念
目标

连通图的生成树(Spanning Tree):

广度优先生成树(BFS Spanning Tree)
深度优先生成树(DFS Spanning Tree)

52:
报告人:XXX
4 最小生成树
4.1 最小生成树的基本概念
目标

最小生成树:
在一个网的所有生成树中,权值总和最小的生成树称为最小代价生成树(Minimum Cost Spanning Tree)

53:
报告人:XXX
4 最小生成树
4.1 最小生成树的基本概念
目标

构造最小生成树的准则:

只能使用该图中的边构造最小生成树;
当且仅当使用n-1条边来连接图中的n个顶点;
不能使用产生回路的边。

54:
报告人:XXX
4 最小生成树
4.1 最小生成树的基本概念
目标

求图的最小生成树的典型的算法:

克鲁斯卡尔(Kruskal)算法
普里姆(Prim)算法
考虑问题的出发点相同: 为使生成树上边的权值之和达到最小,则应使生成树中每一条边的权值尽可能地小。

55:
报告人:XXX
4 最小生成树
4.2 克鲁斯卡尔算法
目标

克鲁斯卡尔算法的基本思想:

  先构造一个只含 n 个顶点的子图 SG,然后从权值最小的边开始,若它的添加不使SG 中产生回路,则在 SG 上加上这条边,如此重复,直至加上 n-1 条边为止。

56:
报告人:XXX
4 最小生成树
4.2 克鲁斯卡尔算法
目标

a
b
c
d
e
g
f
19
5
14
18
27
16
8
21
3
7
12
所得生成树权值和
= 14+8+3+5+16+21 = 67

57:
报告人:XXX
4 最小生成树
4.2 克鲁斯卡尔算法
目标

克鲁斯卡尔(Kruskal)算法处理步骤:

	设图G=(V,  E)是一个具有n个顶点的连通无向网, T=(V,  TE)是图G的最小生成树

T的初始状态为T=(V, ∅)

将图G中的边按照权值从小到大的顺序排序
依次选取每条边,若选取的边未使生成树T形成回路,则加入TE中;否则舍弃,直至TE中包含了n-1条边为止

58:
报告人:XXX
4 最小生成树
4.2 克鲁斯卡尔算法
目标

连通无向网G
v0
v1
v2
v3
v4
v5
7
7
1
7
5
6
3
6
4
2
v0
v1
v2
v3
v4
v5
图G的最小生成树T
最小生成树T 生成过程:
1、 T=(V, TE), TE=∅
2、将边按权值由小到大排序
v0
v2
1
v3
v5
2
v1
v4
3
v2
v5
4
v0
v3
5
v1
v2
6
v2
v4
6
v0
v1
7
v3
v2
7
v4
v5
7
起点
终点
权值
3、按权值由小到大依次取每一条边,如果构成回路就舍弃

TE
v0
v2
1
v3
v5
2
v1
v4
3
v2
v5
4
v1
v2
6
边数 1 2 3 4 5=n-1

59:
报告人:XXX
4 最小生成树
4.2 克鲁斯卡尔算法
目标

克鲁斯卡尔(Kruskal)算法分析:

不是每一条权值最小的边都必然可选,有可能构成回路
最小生成树不是唯一的,因为同一时候可能有多种选择

算法的时间复杂度为O(eloge),即克鲁斯卡尔算法的执行时间主要取决于图的边数
该算法适用于针对稀疏图的操作

60:
报告人:XXX
4 最小生成树
4.3 普里姆算法
目标

普里姆算法的基本思想:
取图中任意一个顶点 v 作为生成树的根,之后往生成树上添加新的顶点 w。在添加的顶点 w 和已经在生成树上的顶点v 之间必定存在一条边,并且该边的权值在所有连通顶点 v 和 w 之间的边中取值最小。之后继续往生成树上添加顶点,直至生成树上含有 n-1 个顶点为止。

61:
4 最小生成树
4.3 普里姆算法
目标

报告人:XXX
a
b
c
d
e
g
f
19
5
14
18
27
16
8
21
3
7
12
所得生成树权值和
= 14+8+3+5+16+21 = 67

62:
报告人:XXX
4 最小生成树
4.3 普里姆算法
目标

补充几个有关距离的定义
两个顶点之间的距离:
指将顶点邻接到的关联边的权值,记为:|u,v|
顶点到顶点集合之间的距离:
指顶点到顶点集合中所有顶点之间的距离中的最小值,记为: |u,V|=min v∈V|u,v|
两个顶点集合之间的距离:
指顶点集合到顶点集合中所有顶点之间的距离中的最小值,记为: |U,V|=min u∈U|u,V|

63:
报告人:XXX
4 最小生成树
4.3 普里姆算法
目标

例题:
设有如下的两个网络, 分别用普里姆(Prim)算法和克鲁斯卡尔(Kruskal)算法具体构造相应的最小生成树。
a
b
d
e
f
c
6
5
3
6
2
5
5
1
6
4

64:
报告人:XXX
4 最小生成树
4.3 普里姆算法
目标

v0
v1
v2
v3
v4
v5
7
7
1
7
5
6
3
6
4
2
|v1,v0|
令:V={v0, v2, v3}
则:|v1,V|
令:U={v2, v4, v5}
V={v0, v2, v3}
则:|U,V|
=7
=6
=2

65:
Thank You!
力学笃行 志存高远