没有合适的资源?快使用搜索试试~ 我知道了~
第8章 图一、复习要点图是一种重要的非线性结构。它的特点是每一个顶点都可以与其它顶点相关联,与树不同,图中各个顶点的地位都是平等的,对顶点的编号都是人为的。通常
资源推荐
资源详情
资源评论
158
第 8 章 图
一、复习要点
图是一种重要的非线性结构。它的特点是每一个顶点都可以与其它顶点相关联,与树不
同,图中各个顶点的地位都是平等的,对顶点的编号都是人为的。通常,定义图由两个集合
构成:一个是顶点的非空有穷集合,一个是顶点与顶点之间关系(边)的有穷集合。对图的处
理要区分有向图与无向图。它的存储表示可以使用邻接矩阵,可以使用邻接表,前者属顺序
表示,后者属链接表示。在本章着重讨论了图的深度优先搜索和广度优先搜索算法,附带引
入了生成树与生成森林的概念。对于带权图,给出了最小生成树的两种方法:Prim 算法和
Kruskal 算法,后者使用了最小堆和并查集作为它的辅助求解手段。在解决最短路径问题时,
采用了逐步求解的策略。最后讨论了作工程计划时常用的活动网络。涉及的主要概念是拓扑
排序和关键路径,在解决应用问题时它们十分有用。
本章复习的要点是:
1、基本知识点
主要要求理解图的基本概念,包括图的定义、图的连通性、图的路径和路径长度、图中
各顶点的度及度的度量、无向连通图的最大边数和最小边数,有向强连通图的最大边数与最
小边数等。掌握图的存储表示,包括邻接矩阵和邻接表,以及这些存储表示上的典型操作,
如构造、求根、找第一个邻接顶点、找下一个邻接顶点等操作的实现算法。并要求掌握图的
两种遍历算法:深度优先搜索和广度优先搜索算法,以及求解连通性问题的方法。理解求解
关节点及构造重连通图的方法。此外,要求掌握构造最小生成树的 Prim 算法和 Kruskal 方
法,掌握活动网络的拓扑排序算法,掌握求解关键路径的方法。需要注意的是,让某个关键
活动提前完成,是否能让整个工程提前完成。
2、算法设计
建立无向带权图的邻接表的算法,要求输入边的数目随机而定。
图的深度优先搜索的递归算法。
利用图的深度优先搜索的递归算法建立图的深度优先生成森林(用左子女右兄弟表示)
的算法。
图的广度优先搜索算法。
利用图的广度优先搜索算法建立图的广度优先生成森林(用左子女右兄弟表示)的算
法。
求解最小生成树的 Prim 算法,注意 nearvex 和 lowcost 辅助数组的变化。
求解最小生成树的 Kruskal 算法,注意 minheap 和 UFset 的变化。
求解最短路径的 dijkstra 算法,注意 dist 辅助数组的变化。
有向图中求解拓扑排序的算法,要求用邻接表作为图的存储表示。注意算法执行过
程中入度为零的顶点栈的变化。
有向图中求解拓扑排序的算法,要求用邻接矩阵作为图的存储表示。
二、难点和重点
1、图:图的定义与图的存储表示
邻接矩阵表示(通常是稀疏矩阵)
邻接表与逆邻接表表示,要求建立算法
邻接多重表(十字链表)表示
159
2、深度优先遍历与广度优先遍历
生成树与生成树林的定义
深度优先搜索算法和广度优先搜索算法
深度优先搜索是个递归的过程,而广度优先搜索是个非递归的过程
为防止重复访问已经访问过的顶点,需要设置一个访问标志数组 visited
3、图的连通性
深度优先搜索可以遍历一个连通分量上的所有顶点
对非连通图进行遍历,可以建立一个生成森林
对非强连通图进行遍历,可能建立一个生成森林
关节点的求解方法和以最少的边构成重连通图的方法
4、最小生成树
对于连通网络、可用不会构成环路的权值最小的 n-1 条边构成最小生成树
会画出用 Kruskal 算法及 Prim 算法构造最小生成树的过程
5、单源最短路径
采用逐步求解的方式求某一顶点到其他顶点的最短路径的方法
要求每条边的权值必须大于零
6、活动网络
拓扑排序、关键路径、关键活动、AOE 网
拓扑排序将一个偏序图转化为一个全序图。
为实现拓扑排序,要建立一个栈,将所有入度为零的顶点进栈
关键路径的计算
三、教材中习题的解析
8-1 画出 1 个顶点、2 个顶点、3 个顶点、4 个顶点和 5 个顶点的无向完全图。试证明在 n
个顶点的无向完全图中,边的条数为 n(n-1)/2。
【解答】
【证明】
在有 n 个顶点的无向完全图中,每一个顶点都有一条边与其它某一顶点相连,所以每一
个顶点有 n-1 条边与其他 n-1 个顶点相连,总计 n 个顶点有 n(n-1)条边。但在无向图中,顶
点 i 到顶点 j 与顶点 j 到顶点 i 是同一条边,所以总共有 n(n-1)/2 条边。
8-2 右边的有向图是强连通的吗?请列出所有的简单路径。
【解答】
判断一个有向图是否强连通,要看从任一顶点出发是否能够回
到该顶点。右面的有向图做不到这一点,它不是强连通的有向图。
各个顶点自成强连通分量。
所谓简单路径是指该路径上没有重复的顶点。
从顶点 A 出发,到其他的各个顶点的简单路径有 A→B,A→D→B,A→B→C,A→D→B
→C,A→D,A→B→E,A→D→E,A→D→B→E,A→B→C→F→E,A→D→B→C→F→E,
A→B→C→F,A→D→B→C→F。
1 个顶点的
无向完全图
2 个顶点的
无向完全图
3 个顶点的
无向完全图
4 个顶点的
无向完全图
5 个顶点的
无向完全图
A
B
C
D
E
F
160
从顶点 B 出发,到其他各个顶点的简单路径有 B→C,B→C→F,B→E,B→C→F→E。
从顶点 C 出发,到其他各个顶点的简单路径有 C→F,C→F→E。
从顶点 D 出发,到其他各个顶点的简单路径有 D→B,D→B→C,D→B→C→F,D→
E,D→B→E,D→B→C→F→E。
从顶点 E 出发,到其他各个顶点的简单路径无。
从顶点 F 出发,到其他各个顶点的简单路径有 F→E。
8-3 给出右图的邻接矩阵、邻接表和邻接多重表表示。
【解答】
(1) 邻接矩阵
(2) 邻接表
(3) 邻接多重表(十字链表)
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
�
010000
000000
010010
100000
010100
001010
Edge
0 A
1 B
2 C
3 D
4 E
5 F
0
3
1
0
1
3
5
2
∧
∧
∧
∧
∧
∧
(出边表)
(入边表)
data fin fout
i j ilink jlink
∧
∧
∧
∧
∧
∧
∧
A
B
C
D
E
F
3
2
4
5
1
4
4
∧
∧
∧
∧
∧
∧
1
0 A
1 B
2 C
3 D
4 E
5 F
∧
∧
0 A
1 B
2 C
3 D
4 E
5 F
0 3 (A, D)
3 1 (D, B)
∧
∧
0 1 (A, B)
1 2 (B, C)
1 4 (B, E)
5 4 (F, E)
3 4 (D, E)
2 5 (C, F)
161
8-4 用邻接矩阵表示图时,若图中有 1000 个顶点,1000 条边,则形成的邻接矩阵有多少矩
阵元素?有多少非零元素?是否稀疏矩阵?
【解答】
一个图中有 1000 个顶点,其邻接矩阵中的矩阵元素有 1000
2
= 1000000 个。它有 1000
个非零元素(对于有向图)或 2000 个非零元素(对于无向图),因此是稀疏矩阵。
8-5 用邻接矩阵表示图时,矩阵元素的个数与顶点个数是否相关?与边的条数是否相关?
【解答】
用邻接矩阵表示图,矩阵元素的个数是顶点个数的平方,与边的条数无关。矩阵中非零
元素的个数与边的条数有关。
8-6 有 n 个顶点的无向连通图至少有多少条边?有 n 个顶点的有向强连通图至少有多少条
边?试举例说明。
【解答】
n 个顶点的无向连通图至少有 n-1 条边,n 个顶点的有向强连通图至少有 n 条边。例如:
特例情况是当 n = 1 时,此时至少有 0 条边。
8-7 对于有 n 个顶点的无向图,采用邻接矩阵表示,如何判断以下问题: 图中有多少条边?
任意两个顶点 i 和 j 之间是否有边相连?任意一个顶点的度是多少?
【解答】
用邻接矩阵表示无向图时,因为是对称矩阵,对矩阵的上三角部分或下三角部分检测一
遍,统计其中的非零元素个数,就是图中的边数。如果邻接矩阵中 A[i][j] 不为零,说明顶
点 i 与顶点 j 之间有边相连。此外统计矩阵第 i 行或第 i 列的非零元素个数,就可得到顶点 i
的度数。
8-8 对于如右图所示的有向图,试写出:
(1) 从顶点①出发进行深度优先搜索所得到的深度优
先生成树;
(2) 从顶点②出发进行广度优先搜索所得到的广度优
先生成树;
【解答】
(1) 以顶点①为根的深度优先生成树(不唯一):② ③ ④ ⑤ ⑥
(2) 以顶点②为根的广度优先生成树:
①
②
③
④
⑤
或
①
②
③
④
⑤
①
②
③
④
⑤
①
②
③
④
⑤
剩余20页未读,继续阅读
资源评论
Friday永不为奴
- 粉丝: 13
- 资源: 317
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功