数据结构——图(习题篇)

本文会挑选图中相关例题进行讲解,并复习相关的知识点
建议先将题做一次,再看题解和答案

题1

设图的邻接矩阵如下所示,各顶点的度依次是( )
A.1,2,1,2
B.2,2,1,1
C.3,4,2,3
D.4,4,2,2

[ 0 1 0 1 0 0 1 1 0 1 0 0 1 0 0 0 ] \left[ \begin{matrix} 0 & 1 & 0 & 1\\ 0 & 0 & 1 & 1\\ 0 & 1 & 0 & 0\\ 1 & 0 & 0 & 0 \end{matrix} \right] 0001101001001100
[分析]
该题考察的是邻接矩阵的特性及有向图、无向图的特性
[方法]
由于该邻接矩阵为非对称矩阵,说明图是有向图。
度为入度与出度之和。各顶点的度是矩阵中此结点对应的行(对应出度)和列(对应入度)的非零元素之和
以节点一为例,该结点对应的行(出度)为2,对应的列(入度)为1,因此该点的度为3,其他以此类推
[答案]C

题2

如果从无向图的一个顶点出发,进行一次深度优先搜索就能访问所有的结点,则该无向图一定()
A.是连通图
B.是强连通图
C.有回路
D.是有向无环图

[分析]
该题考察的是对DFS的理解以及连通图/连通图/完全图/有向无环图的理解
[方法]
连通图:任意两个顶点之间都能够连通,则该无向图成为连通图(连通:图中从一个顶点到达另一顶点,若存在至少一条路径,则称这两个顶点是连通的)
强连通图:在有向图中,若任意两个顶点 Vi 和 Vj,满足从 Vi 到 Vj 以及从 Vj 到 Vi 都连通,也就是都含有至少一条通路,则称此有向图为强连通图
有向无环图:有向无环图中每条边都有一个定义的方向,每条边都是从一个顶点到另一个顶点的单方向流。并且有向无环图是非循环的,对于任何顶点来讲,如果沿着通过顶点连接到另一个顶点的边,是无法返回该初始顶点
DFS的思想是假设初始状态是图中所有顶点均未被访问,则从某个顶点v出发,首先访问该顶点,然后依次从它的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和v有路径相通的顶点都被访问到。 若此时尚有其他顶点未被访问到,则另选一个未被访问的顶点作起始点,重复上述过程,直至图中所有顶点都被访问到为止
由于强连通图和有向无环图均为有向图,与题意不符,而经过一次DFS就可以访问所有的结点(因为在连通图中至少存在一条路径使两个顶点联通,即可相互访问,而连通图是没有回路的,因此排除C)
[答案]A

题3

下列关于 AOE网的叙述中,不正确的是 ()
A.关键活动不按期完成就会影响整个工程的完成时间
B.任何一个关键活动提前完成,那么整个工程将会提前完成
C.所有的关键活动提前完成,那么整个工程将会提前完成
D.某些关键活动提前完成,那么整个工程将会提前完成

[分析]
考察的是对AOE网的理解,特别是关键活动和关键路径的理解
[方法]
AOE网:AOE网是用边表示活动,用顶点表示事件(活动的完成)。边是带权的,表示活动需要的时间,对入度为0的点称为工程的开始点,对出度为0的点成为工程的结束点
在这里插入图片描述
AOE网中,从开始点到结束点最长的路径称为关键路径,在关键路径上的活动称为关键活动。
答案A,关键路径长度代表整个工期的最短完成时间,关键活动延期完成,必将导致关键路径长度增加,即整个工期的最短完成时间增加,因此正确
答案B,网中的关键路径不唯一。对于有几条关键路径的网来说,单单提高一条关键路径上关键活动的速度,是不能缩短整个工程工期的,而必须同时提高几条关键路径上活动的速度,因此错误
通过对A,B的讲解,也可以说明所有的关键活动提前完成,那么整个工程将会提前完成,某些关键活动(交汇点)提前完成,工程能提前完成
[答案]B

题4

已知有向图 G=(V,E),其中 V={V1,V2,V3,V4,Vs,V6,V7},E={V1,V2>,<V1,V3>,<V1,V4><V2,V5>,<V3,V5>,<V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>,G的拓扑序列是( )。
A.V1,V3,V4,V6,V2,V5,V7
B.V1,V3,V2,V6,V4,V5,V7
C.V1,V3,V4,V5,V2,V6,V7
D.V1,V2,V5,V3,V4,V6,V7

[分析]
该题考察的是根据有向图构造拓扑序列,主要通过排除法做此类题
[方法]
图的拓扑序必须要满足以下两点:
1.每个顶点只出现一次。
2.对于图中的任何一条边,起点必须在终点之前。

按照上图V和E的关系可以画出如下有向图G
在这里插入图片描述
对B选项V6在V4前,因此排除;对C选项,V5在V2前,因此排除;对D选项,V5在V3前,因此排除
[答案]A

题5

设有无向图G=(V, E)和G’=(V’, E’),若G’是G的生成树,则下列不正确的是()
a.G’为G的连通分量
b.G’为G的无环子图
c.G’为G的极小连通子图且V’ = V
A、a和b
B、只有c
C、b和c
D、只有a

[分析]
考察的是对生成树的理解
[方法]
生成树的定义为:如果连通图G的一个子图是一棵包含G的所有顶点的树,则该子图称为G的生成树,图的生成树不唯一。从不同的顶点出发进行遍历,可以得到不同的生成树。边的个数应为顶点个数减一
在这里插入图片描述

连通图中的生成树必须满足以下 2 个条件:
1.包含连通图中所有的顶点;
2.任意两顶点之间有且仅有一条通路;

因为极大连通子图简称连通分量,生成树是极小连通子图。故a不对,c对。
生成树无环,故b对
[答案]D

题6

对于有n个点、e条边的连通图用Prim算法最小生成的时间树复杂度为_________,利用 Kruskal算法最小生成的时间复杂度为_________
[分析]
考察的是对Prim算法和Kruskal算法运用的理解
[方法]
对Prim算法,是采用贪心算法的思想。对于包含 N 个顶点的连通网,普里姆算法每次从连通网中找出一个权值最小的边,以迭代方式重复N-1次,由N-1条权值最小的边组成的生成树就是最小生成树
对Kruskal算法,是将连通网中所有的边按照权值大小做升序排序,从权值最小的边开始选择,只要此边不和已选择的边一起构成环路,就可以选择它组成最小生成树。对于N个顶点的连通网,挑选出N-1条符合条件的边,这些边组成的生成树就是最小生成树
因这里算时间复杂度有一定麻烦,大家可以先记住答案,有空可以看看具体的算法流程去理解时间复杂度的问题
结论是:Prim算法采用的是邻接矩阵作为存储结构,更适合于稠密图的最小生成树,复杂度为O(n^2),Kruskal算法采用的是边集数组作为存储结构,更适合于稀疏图的最小生成树,复杂度为O(elog2e)
[答案] O(n^2)     O(elog2e)

题7

在含n个顶点和e条边的无向图的邻接矩阵中,零元素的个数为()
A.e     B.2e     C.n^2-e     D.n^2-2e

[分析]
考察的是对无向图和邻接矩阵的理解
[方法]
对无向图而言,邻接矩阵一定是对称的,而且主对角线一定为零,副对角线不一定为0,用邻接矩阵来表示一个具有n个顶点的有向图时需要n^2个单元来存储邻接矩阵,由于对称的特性,药达到对称的标准,则e条边在邻接矩阵的表现是2e(1条边在邻接矩阵的表现为两个位置非0),因此1元素个数为2e,零元素个数为n ^2-2e
用下图简单的图来表示:
在这里插入图片描述
因为无向图的特性,如果V1和V2有连接,在邻接矩阵上(1,2)和(2,1)均为1,因此e条边对应的1元素的个数是2e,因此零元素个数为n ^2-2e
[答案]D

题8

(判)一个有向图的邻接表和逆邻接表中的结点个数一定相等
[分析]
考察的是对邻接表和逆邻接表的理解
[方法]
邻接表是指每个单链表的第一个结点存放有关顶点的信息,把这一结点看成链表的表头,其余结点存放有关边的信息,反应的是顶点出度的情况,而逆邻接表反应的是顶点的入度情况
因此邻接表和逆邻接表的区别仅在于入边和出边,只是调整方向,而节点个数是相等的
[答案]√

题9

(判)对于带权无向图 G = (V, E),M 是 G 的最小生成树,则 M 中任意两点 V1 到 V2 的路径一定是它们之间的最短路径。
[分析]
考察的是对最小生成树的理解
[方法]
由于图的所有生成树中具有边上的权值之和最小的树称为图的最小生成树,但最小生成树的总权最小,不是其中的某一条任意路径最小,因此V1和V2的路径不一定是最小的
[答案]×

题10

用Dijkstra算法是通过求________________________的次序来得到最短路径的
[分析]
考察的是对Dijkstra算法的理解
[方法]
Dijkstra算法是一种类似于贪心的算法
步骤如下:图为G={V,E}
1.初始时令 S={V0},T=V-S={其余顶点},T中顶点对应的距离值
若存在<V0,Vi>,d(V0,Vi)为<V0,Vi>弧上的权值
若不存在<V0,Vi>,d(V0,Vi)为∞
2.从T中选取一个与S中顶点有关联边且权值最小的顶点W,加入到S中
3.对其余T中顶点的距离值进行修改:若加进W作中间顶点,从V0到Vi的距离值缩短,则修改此距离值
[答案]
求某一顶点到其余各顶点间的最短路径是按路径长度递增

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
...... ( B )3. 有8个结点的无向图最多有 条边。 A.14 B. 28 C. 56 D. 112 ( C )4. 有8个结点的无向连通最少有 条边。 A.5 B. 6 C. 7 D. 8 ( C )5. 有8个结点的有向完全有 条边。 A.14 B. 28 C. 56 D. 112 ( B )6. 用邻接表表示进行广度优先遍历时,通常是采用 来实现算法的。 A.栈 B. 队列 C. 树 D. ...... 二、填空题(每空1分,共20分) 1. 有 邻接矩阵 、 邻接表 等存储结构,遍历有 深度优先遍历 、 广度优先遍历 等方法。 2. 有向G用邻接表矩阵存储,其第i行的所有元素之和等于顶点i的 出度 。 3. 如果n个顶点的是一个环,则它有 n 棵生成树。 4. n个顶点e条边的,若采用邻接矩阵存储,则空间复杂度为 O(n2) 。 5. n个顶点e条边的,若采用邻接表存储,则空间复杂度为 O(n+e) 。 ....... 1. 【严题集7.1①】已知如所示的有向,请给出该的: 每个顶点的入/出度; 邻接矩阵; 邻接表; 逆邻接表。 2. 【严题集7.7②】请对下的无向带权: 写出它的邻接矩阵,并按普里姆算法求其最小生成树; 写出它的邻接表,并按克鲁斯卡尔算法求其最小生成树。 ........ 五、算法设计题(每题10分,共30分) 1. 【严题集7.14③】编写算法,由依次输入的顶点数目、弧的数目、各顶点的信息和各条弧的信息建立有向的邻接表。 解:Status Build_AdjList(ALGraph &G) //输入有向的顶点数,边数,顶点信息和边的信息建立邻接表 { InitALGraph(G); scanf("%d",&v); if(v<0) return ERROR; //顶点数不能为负 G.vexnum=v; scanf("%d",&a); if(a<0) return ERROR; //边数不能为负 G.arcnum=a; for(m=0;m<v;m++) G.vertices[m].data=getchar(); //输入各顶点的符号 for(m=1;m<=a;m++) { t=getchar();h=getchar(); //t为弧尾,h为弧头 if((i=LocateVex(G,t))<0) return ERROR; if((j=LocateVex(G,h))nextarc;q=q->nextarc); q->nextarc=p; } p->adjvex=j;p->nextarc=NULL; }//while return OK; }//Build_AdjList 2. 【严题集7.15③】试在邻接矩阵存储结构上实现的基本操作:DeleteArc(G,v,w)。 (刘提示:删除所有从第i个顶点出发的边的方法是 将邻接矩阵的第i行全部置0 ) ........

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值