《数据结构及其应用》笔记含答案 第六章_图

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

第6章图
一、填空题
1、用顶点表示活动,用弧表示活动间优先关系的有向图称为顶点表示活动的网(AOV-网)。

2、有n(n-1)/2条边的无向图称为_无向完全图__;有n(n-1)条边的有向图称为_有向完全图。

3、一个含n个结点的完全无向图中,其最大边数为__ n(n-1)/2_。

4、顶点表示事件,弧表示活动,权表示活动持续时间的有向图称为AOE-网。

二、判断题
1、任何无向图都存在生成树。

()
2、连通分量是无向图中的极小连通子图。

()
3、强连通分量是有向图中的极大强连通子图。

()
4、用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中结点个数有关,而与图的边数无关。

()
5、邻接表法只用于有向图的存储,邻接矩阵对于有向图和无向图的存储都适用。

()
6、求最小生成树的Prim算法在边较少、结点较多时效率较高。

()
7、图的最小生成树的形状可能不唯一。

()
8、一个AOV网的拓扑序列一定是唯一的。

()
9、若AOV网中存在环,则不能求它的拓扑排序序列。

()
10、若AOV网中所有顶点都在它的拓扑有序序列中,则该AOV网必定不存在环。

()
11、缩短关键路径上活动的工期一定能够缩短整个工程的工期。

()
12、AOE网中一定只有一条关键路径。

()
三、单项选择题
1、在一个图中,所有顶点的度数之和等于图的边数的(C)倍。

A.1/2 B.1 C.2 D.4
2、在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的(B)倍。

A.1/2 B.1 C.2 D.4
解释:有向图所有顶点入度之和等于所有顶点出度之和。

3、具有n个顶点的有向图最多有(B)条边。

A.n B.n(n-1) C.n(n+1) D.n2
解释:有向图的边有方向之分,即为从n个顶点中选取2个顶点有序排列,结果为n(n-1)。

4、n个顶点的连通图用邻接距阵表示时,该距阵至少有(B)个非零元素。

A.n B.2(n-1) C.n/2 D.n2
5、G是一个非连通无向图,共有28条边,则该图至少有(C)个顶点。

A.7 B.8 C.9 D.10
解释:8个顶点的无向图最多有8*7/2=28条边,再添加一个点即构成非连通无向图,故至少有9个顶点。

6、若从无向图的任意一个顶点出发进行一次深度优先搜索可以访问图中所有的顶点,则该图一定是(B)图。

A.非连通B.连通C.强连通D.有向
解释:即从该无向图任意一个顶点出发有到各个顶点的路径,所以该无向图是连通图。

7、下面(A)算法适合构造一个稠密图G的最小生成树。

A.Prim算法B.Kruskal算法C.Floyd算法D.Dijkstra算法
解释:Prim算法适合构造一个稠密图G的最小生成树,Kruskal算法适合构造一个稀疏图G的最小生成树。

8、用邻接表表示图进行广度优先遍历时,通常借助(B)来实现算法。

A.栈 B. 队列 C. 树D.图
解释:广度优先遍历通常借助队列来实现算法,深度优先遍历通常借助栈来实现算法。

9、用邻接表表示图进行深度优先遍历时,通常借助(A)来实现算法。

A.栈 B. 队列 C. 树D.图
解释:广度优先遍历通常借助队列来实现算法,深度优先遍历通常借助栈来实现算法。

10、深度优先遍历类似于二叉树的(A)。

A.先序遍历B.中序遍历C.后序遍历D.层次遍历
11、广度优先遍历类似于二叉树的(D)。

A.先序遍历B.中序遍历C.后序遍历D.层次遍历
12、图的BFS生成树的树高比DFS生成树的树高(C)。

A.小B.相等C.小或相等D.大或相等
解释:对于一些特殊的图,比如只有一个顶点的图,其BFS生成树的树高和DFS生成树的树高相等。

一般的图,根据图的BFS生成树和DFS树的算法思想,BFS生成树的树高比DFS生成树的树高小。

13、已知图的邻接矩阵如图6.30所示,则从顶点v0出发按深度优先遍历的结果是()。

图6.30 邻接矩阵
14、已知图的邻接表如图6.31所示,则从顶点v0出发按广度优先遍历的结果是(D),按深度优先遍历的结果是(D)。

图6.31 邻接表
A.0 1 3 2 B.0 2 3 1 C.0 3 2 1 D.0 1 2 3
15、下面(B)方法可以判断出一个有向图是否有环。

A.深度优先遍历B.拓扑排序C.求最短路径D.求关键路径
四、应用题
1、已知图6.32所示的有向图,请给出:
1)每个顶点的入度和出度;
2)邻接矩阵;
3)邻接表;
4)逆邻接表。

图6.32 有向图
图6.33 无向网
答案:
2、已知如图6.33所示的无向网,请给出: 1)邻接矩阵; 2)邻接表; 3)最小生成树
答案:
⎥⎥
⎥⎥⎥⎥
⎥⎥⎥⎥
⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢
⎢⎢⎣⎡∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞




645625236379456755555395543
4
→→
→→→→
→→→→
→→→→→→
→→→
→→→
→→→
3、已知图的邻接矩阵如图6.34所示。

试分别画出自顶点1出发进行遍历所得的深度优先生成树和广度优先生成树。

图6.34 邻接矩阵
答案:
4、有向网如图6.35所示,试用迪杰斯特拉算法求出从顶点a到其他各顶点间的最短路径,完成表6.9。

图6.35 有向网
表6.9
5、试对图6.36所示的AOE-网:
1)求这个工程最早可能在什么时间结束;
2)求每个活动的最早开始时间和最迟开始时间;
3)确定哪些活动是关键活动
图6.36 AOE-网
答案:按拓扑有序的顺序计算各个顶点的最早可能开始时间Ve和最迟允许开始时间Vl。

然后再计算各个活动的最早可能开始时间e和最迟允许开始时间l,根据l - e = 0? 来确定关键活动,从而确定关键路径。

此工程最早完成时间为43。

关键路径为<1, 3><3, 2><2, 5><5, 6>
6、对于下图所示的有向图,试给出:
1)每个顶点的入度和出度; 2)邻接矩阵; 3)邻接表;答案:
3)
7、一个无向图的邻接表如下图所示:
1)从顶点出发进行深度优先搜索,经历的结点顺序为。

、、、
2)从顶点V0出发进行广度优先搜索,经历的结点顺序为。

、、、
8、分别用PRIM 算法和Kruskal算法求下图的最小生成树。

图1:
PRIM:
(1)(2)(3)
U={1} U={1,5} U={1,5,4}
(4) (5)
U={1,5,4,3} U={1,5,4,3,2}
(6) (7)
U={1,5,4,3,2,7} U={1,5,4,3,2,7,6}
Kruskal:
将权值从小到大排列,初始状态仅为含有7个顶点的非连通图
(1)初始状态
(2)
(3)
(4)
(5)
(6)
(7)
图2:
PRIM :

、 、
、 、 、
、 、 、 、
、 、 、 、 、
(1)初始状态
(2)
(3)
(4)
(5)
(6)
9、计算下列有向图的拓扑有序序列,并画出每个结点的输出过程。

图1:
(1)输出
(2)输出
(3)输出
(4)输出
(5)输出
(6)输出 (7)输出 (8)输出
最后得到拓扑有序序列为: 、 、 、 、 、 、 、 图2:
(1)输出 (2)输出 (3)输出
(4)输出
(5)输出
最后得到拓扑有序序列为: 、 、 、 、 、 10、有向图G 如下所示,写出两个拓扑序列。

第一种:
(1)输出
(2)输出
(3)输出
(4)输出
(4)输出
最后得到的拓扑有序序列为: 、 、 、 、 、 第二种:
(1)输出
(2)输出
(3)输出
(4)输出
(4)输出
最后得到的拓扑有序序列为: 、 、 、 、 、 11、如下图所示AOE 网:
1)列出各事件的最早、最迟发生时间; 2)列出各活动的最早、最迟发生时间;
3)找出该AOE 网中的关键路径,并回答完成该工程需要的最短时间。

图1:
关键路径如下图,完成该工程需要的最短时间=5+7+6+8+3=29
图2:
关键路径如下图,完成该工程需要的最短时间=6+1+9+2=18
五、算法设计题
1、请在下划线中填写语句,完成采用邻接矩阵表示法创建无向网的算法程序。

#define MaxInt 32767
#define MVNum 100
typedef char VerTexType;
typedef int ArcType;
typedef struct{
VerTexType vexs[MVNum];
ArcType arcs[MVNum][MVNum];
int vexnum,arcnum;
}AMGraph;
Status CreateUDN(AMGraph &G)
{
cin>>G.vexnum>>G.arcnum;
for(i = 0; i<G.vexnum; ++i)
cin>>G.vexs[i];
for(i = 0; i<G.vexnum;++i)
for(j = 0; j<G.vexnum;++j)
G.arcs[i][j] = MaxInt;
for(k = 0; k<G.arcnum;++k){
cin>>v1>>v2>>w;
i = LocateVex(G, v1);
j = LocateVex(G, v2);
G.arcs[i][j] = w;
G.arcs[j][i] = G.arcs[i][j];
}
return OK;
}。

相关文档
最新文档