数据结构第7次练习-图(基础篇)

文章主要介绍了图论中的判断题解答,包括最短路径计算、连通性分析、广度优先搜索、最小生成树算法(如Prim算法)、邻接矩阵特性、有向图的度数特征以及深度优先遍历等概念,同时涉及关键路径在AOE网中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:判断题

1-1

答案:T

解析:c到a的最短路径是12+2=14,所以是大于10的

 1-2

 答案:T

一个连通分量要进行一次广度优先搜索

 1-3

 答案:F

解析:是存在等于顶点的个数减一的情况,比如三个顶点用两个边连接,是一个连通的,他的边数就是顶点数-1

 1-4

 

答案:T

解析:无向图的邻接矩阵沿主对角线对称;
在这里插入图片描述

 1-5

 答案:T

解析:边数*2

 1-6

 

 答案:F

解析:如果顶点数为3,边为3,那就是一个一个完全图,不存在度为1的顶点

1-7

 

答案;T
解析:Prim算法是一种用于求解最小生成树的贪心算法。它通过每一步选择一个与当前生成树相连的顶点,并添加一条边连接该顶点和生成树中的某个顶点,从而逐步生成最小生成树。
具体来说,Prim算法的步骤如下:
初始化一个空的生成树和一个空的顶点集合。
从任意一个顶点开始,将其加入生成树,并将其相邻的边加入边集合。
从边集合中选择权重最小的边,并将其连接的顶点加入生成树和顶点集合。
重复步骤3,直到所有顶点都加入生成树。
最终生成的树就是最小生成树。
通过每一步选择权重最小的边,Prim算法保证了生成的树是最小生成树,即树中所有边的权重之和最小。

 1-8

答案:T

解析:邻接矩阵是一种常见的图的表示方法,它使用一个二维数组来表示图中的顶点之间的连接关系。对于一个有n个顶点的图,邻接矩阵是一个n×n的矩阵,其中矩阵的每个元素表示两个顶点之间是否存在边。
在邻接矩阵中,如果顶点i和顶点j之间存在边,则邻接矩阵的第i行第j列和第j行第i列的元素为1;如果它们之间不存在边,则对应的元素为0。对于无向图来说,邻接矩阵是对称的。
使用邻接矩阵法存储图的优点是:
存储空间占用只与图中结点个数有关,而与边数无关。因为邻接矩阵只需要一个二维数组来表示连接关系,不需要额外的空间来存储边的信息。
可以快速判断两个顶点之间是否存在边,只需要访问邻接矩阵中的对应元素即可。
可以方便地获取顶点的度数,即与该顶点相连的边的数量。
然而,邻接矩阵法也有一些缺点,主要是在稀疏图(边数相对较少)的情况下,会浪费大量的存储空间。

 1-9

 

 答案:T

解析:有向图的全部入度之和与出度之和想等,并且等于边数

1.所有顶点的度数之和 等于 边数的二倍。
2.所有顶点的入度之和 等于 出度之和。
3.n个顶点的有向完全图有n*(n-1)条边。
4.n个顶点的强连通图至少有n条边。

1-10

 答案:F

解析:克鲁斯卡尔算法是维护一个森林,每一步把两棵树合并成一棵;

 二:选择题

2-1

 答案:A

解析:邻接矩阵是用二维数组来表示节点之间的关系,二维数组的个数就是N*N;

 2-2

答案:C

解析:完全图的时候,顶点的度最大,最大是N*(N-1),所以是顶点数的N-1倍

 2-3

 

答案:B

解析:图的深度遍历是适用于有向图的。深度遍历是一种通过探索图中的深层节点来遍历图的算法。它可以应用于有向图和无向图,无论图中的边是有向还是无向的。
在深度遍历中,从起始节点开始,沿着一条路径尽可能深入图中,直到无法继续深入为止,然后回溯到上一个节点,继续探索其他路径。这个过程会递归地进行,直到遍历完所有的节点。
 

 2-4

答案:D

解析:这个题没啥好说的,v2和v3之间都没有路径

 2-5

 

答案:A

解析:没啥好说的,最短路径问题,给的答案只有迪杰斯特拉算法可以

 2-6

答案;D

解析:.所有顶点的度数之和 等于 边数的二倍。
2.n个顶点的无向完全图有 n(n-1)/2 条边。
3.n个顶点的连通图至少有 n-1 条边。

 2-7

答案;B

解析:如果v1和v5有边,如果进行深度遍历的话就不会出现v4,v5的情况

先看A,v0和v6无所谓,因为v4,v5,v6是先访问的

再看C,v4和v6也无所谓,因为v4 v5 会先访问掉

再看D V0和V2也无所谓,因为前面这些节点都会被先访问到

 2-8

答案:B

解析:

深度优先搜索(DFS)是一种遍历图的算法,它可以用于检测有向图中是否存在回路。在深度优先搜索中,我们从一个起始节点开始,沿着一条路径尽可能深入图中,直到无法继续深入为止。如果在搜索过程中遇到已经访问过的节点,则说明存在回路。
通过使用深度优先搜索,我们可以在有向图中检测到回路的存在。如果在搜索过程中遇到一个已经访问过的节点,那么说明存在回路。

 2-9

答案;B

解析:无向图肯定都是对称的,因为一个边连接两个节点,从v1可以到达v2,从v2也可以到达v1,a12=1,a21也等于1,但是对于有向图来说可以有两个顶点两条边,也可以一条边,也就是a12=1,a21不一定有边等于1

 2-10

 答案:C

 解析:迪斯科拉算法就是为了解决最短路径问题

 2-11

答案:D

解析:16边*2=32,32-3*12-3*12=8,其他顶点的度均小于3,可以是2,也可以是1,当为2时,8/2=4,4个顶点,此时顶点个数最少,加上之前的,3+4+4=11;

 2-12

 

 答案:C

 解析:

 2-13

答案:D

解析:广度优先搜索==层序遍历

从V1出发,第一层指向地址2,地址2的节点为V3,第二次指向地址1,地址1的节点为v2,第三次指向地址3,地址三的节点为v4

第二轮到V3,第一次指向地址3,地址3走过了跳过,第二次指向了地址4,地址4的节点为v5

v1->v3->v2->v4->v5;

2-14​​​

答案:B

1.a e b c d

2.a b c e d

3.a b e c d

 2-15

 答案:D

解析:入度就是对应列标的非零元素的个数

 2-16

答案:C 

 2-17

 答案:A

n个顶点的完全无向图的边的n(n-1)/2;

 2-18

 答案:B

解析:矩阵只要顶点

邻接表是顶点数组加边实现的

 2-19

 答案:A

解析:不唯一,可以有多个最小生成树

 2-20

答案:C

解析:这个没啥好说的,看箭头就行了,入度是箭头指向,出度是箭头指出,查个数就行

 2-21

 答案:C

解析:

有向图的全部入度之和与出度之和想等,并且等于边数

1.所有顶点的度数之和 等于 边数的二倍。
2.所有顶点的入度之和 等于 出度之和。
3.n个顶点的有向完全图有n*(n-1)条边。
4.n个顶点的强连通图至少有n条边。

 2-22

 答案:D

 解析:明显这个2不对,因为他还有前驱节点1指向他自个

2-23

 答案:A

 解析:深度类似于先序遍历,没啥好说的

 2-24

​​​​​​​

 答案:C

 2-25

​​​​​​​

 答案:A

深度优先遍历算法的时间复杂度取决于节点和边的数量。在邻接表表示中,每个节点的邻接表存储了与其相邻的节点,而每条边只会在两个节点的邻接表中出现一次。
在深度优先遍历算法中,我们会遍历每个节点,并且对于每个节点,我们会访问其邻接节点。因此,时间复杂度可以表示为O(N+E),其中N是节点的数量,E是边的数量。

 2-26

 答案:7,n(n-1)/2=15;n=6,6+1=7;

 2-27

 答案:B

解析:邻接表查入度需要遍历所有节点。

 2-28

 答案:A

解析:4的路径长度为14最大,3的最短路径长度为7,6的最短路径长度为9

2-29

 答案:D

 在AOE网中,从源点到汇点最长的路径称为关键路径

 2-30

 答案:C

肯定是连通的,如果不连通,从某一顶点出发无法访问到其他全部顶点

...... ( 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、付费专栏及课程。

余额充值