数据结构-图篇

2023-11-01

数据结构-图篇:


内容:

  1. 思维导图(基于教材)
  2. 错题复盘+计算题(基于习题解析)
  3. 课后习题

1.思维导图

在这里插入图片描述


2.错题复盘+计算题

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

A.n B.n(n-1) C. n(n+1) D.n^2
解析:对于有n个顶点的有向图,边数最多的情况是:任意一个点到其他n-1个点都有一条有向边,即最多有n(n-1)条边。换个角度,因为有向图的边有方向之分,最多的变数即从n个顶点中选取2个顶点的有序排列,结果为n(n-1)

2 n个顶点的连通图邻接矩阵表示时,该矩阵至少有(B)个非零元素

A.n B.2(n-1) C.n/2 D.n^2
解析:n个顶点的连通图至少需要n-1条边,由于无向图的每条边同时关联两个顶点,所以邻接矩阵中每条边都存储两次,即矩阵中至少有2(n-1)个非零元素

3 G是一个非连通无向图,共有28条边,则该图至少有(C)个顶点

A.7 B.8 C.9 D.10
解析:根据无向图是具有n(n-1)/2条边的特点,可得8个顶点的连通无向图最多有8*7/2=28条边,再添加一个点构成非连通图无向图

4 下列关于最短路径算法的说法中,错误的是(B)

1.Dijkstra算法中弧上权值不能为负的原因是负数再实际应用中无意义
2.利用Dijkstra算法求每对顶点之间的最短路径算法的时间复杂度为O(n^3)(图用邻接矩阵表示)
3.Floyd求每对顶点之间的最短路径算法中允许弧上的权值为负数,但不能有权值和为负数的回路
A.1、2、3 B.1 C.1、3 D.2、3
解析:1.Dijkstra算法是按路径长度递增的次序求解最短路径的,每次选取路径最短的顶点后,需要对尚未求得最短路径的其他顶点依次进行更新,如果权值为负数,更新之后某个顶点的路径可能比之前已求得的路径短,出现矛盾。所以Dijkstra算法中弧上权值不能为负的原因是本身的适用条件不允许权值为负数。23正确

5 带权有向图G用邻接矩阵A存储,则顶点Vi的入度等于A中的(D)

A.第i行非无穷的元素之和
B.第i列非无穷的元素之和
C.第i行非无穷且非0的元素之和
D.第i列非无穷且非0的元素之和
解析:顶点Vi的出度是第i行非无穷且非0的元素之和,顶点Vi的入度是第i列非无穷且非0的元素之和

6 如果具有n个顶点的图是一个环,则它有(C)棵生成树

A.1 B.n-1 C.n D.2n
解析:n个顶点构成的环有n条边,去掉任意一条便是一棵生成树

7 当各边上的权值(A)时,可以使用BFS算法来解决单源点最短路径问题

A.都相等 B.都不相等 C.不一定都相等 D.都大于0
解析:BFS从起点开始逐层向外层扩展遍历的顶点,无法考虑边的权值,只适合求权值相等的图的单源点最短路径问题

8 设有n个顶点e条边的有向图用邻接表表示,则删除与某个顶点v相关的所有边的时间复杂度为(C)

A.O(n) B.O(e) C.O(n+e) D.O(n*e)
解析:删除与某个顶点v相关的所有边时,首先需要删除以v为头结点的单链表(删除顶点v的出边),最多有n-1个结点,时间复杂度为O(n),其次扫描所有边表的结点,删除顶点v的入边,时间复杂度为O(e),总时间复杂度为O(n+e)

9 以下叙述中,正确的是(A)

A.只要无向连通图中没有权值相同的边,则其最小生成树唯一
B.只要无向图中有权值相同的边,则其最小生成树一定不唯一
C.从n个顶点的连通图中选取n-1条权值最小的边,即可构成最小生成树
D.设连通图G含有n个顶点,则含有n个顶点、n-1条边的子图一定是G的生成树
解析:当无权值相同的边全部包含于最小生成树中时,则最小生成树唯一,B错误;选取n-1条权值最小的边可能会构成回路,C错误;含有n个顶点、n-1条边的子图可能会构成回路,也可能不连通,D错误

10 下列关于无向连通图特性的叙述中,正确的是(A)

1.所有顶点的度之和为偶数
2.边数大于顶点个数减1
3.至少有一个顶点的度为1
A.只有1 B.只有2 C.1和2 D.1和3
解析:1.无向连通图所有顶点度数之和是边的两倍,所以1正确;无向连通图对应的生成树也是无向连通图,此时边数等于顶点个数减1,所以2错误;3的话,如果图中只包含一个连接所以顶点的环,图的边数等于顶点个数,每个顶点的度都是2,也错了

11 设有向图含n个顶点及e条弧,则表示该图的邻接表中包含的弧结点数是(B)

A.n B.e C.2e D.ne
解析:在邻接表中,对图中每个顶点Vi建立一个单链表,把Vi相邻接的顶点放在这个链表中,链表中的每一个结点代表一条弧,题中e条弧,故弧结点有e个

12 如果一个连通网络G中各边权值互不相同,权值最小的边一定包含在G的(A)生成树中

A.最小 B.唯一 C.广度优先 D.深度优先
解析:设N=(V,E)是一个连通网,U是顶点集V的一个非空子集,若(u,v)是一条具有最小权值的边,其中u∈U,v∈V-U,则存在一棵包含边(u,v)的最小生成树。由于各边权值各不相同,所以最小生成树唯一,因此权值最小的边一定包含在G的最下生成树中

13 若无向图G=(V,E)中含7个顶点,要保证图G在任何情况下都是连通的,则需要的边数最少是(C)

A.6 B.15 C.16 D.21
解析:要保证任意变动图G的边,图G始终保持连通状态,考虑极端情况,图G的6个顶点构成完全连通子图G1,则跟第3题一样计算,G1有6*5/2=15条边,再加一条边,第7个顶点与G1构成连通图,所以边至少要16条,再少就不合适了

14 对下图所示的有向图进行拓扑排序,可以得到不同的拓扑序列个数是(B)

在这里插入图片描述
A.4 B.3 C.2 D.1
解析:如下图所示,按照拓扑排序的步骤画出排序序列
在这里插入图片描述

15 若用邻接矩阵存储有向图,矩阵中主对角线以下的元素均为零,则关于该图拓扑序列的结论是(C)

A.存在,且唯一 B.存在,且不唯一 C.存在,可能不唯一 D.无法确定是否存在
解析:对角线以下的元素均为零,表明只有顶点Vi到顶点Vj(i<j)可能有边,而顶点Vj到顶点Vi一定没边。简单来说,该图一定没有回路,所以可以产生拓扑序列,但拓扑序列不一定唯一

16 下列关于最小生成树的说法中,正确的是(A)

1.最小生成树的代价之和唯一
2.权值最小的边一定会出现在所有的最小生成树中
3.用普里姆(prim)算法从不同顶点开始得到的最小生成树一定相同
4.使用普里姆和克鲁斯卡尔(Kruskal)算法得到的最小生成树总不相同
A.仅1 B.仅2 C.仅1,3 D.仅2,4
解析:1正确;2错误:如果权值最小的边有多条但产生回路,那么需要去掉某些权值最小的边来避免回路;3错误:当产生多条权值相同的边时,用prim算法从不同顶点开始得到的最小生成树不一样相同;4错误:在构造最小生成树时,prim算法通过不断归并点,Kruskal算法通过不断归并边完成,二者构造的最小生成树可能相同,也可能不同

17 下图所示的AOE-网表示一项包含8个活动的工程,通过同时加快若干活动的进度可以缩短整个工程的工期,下列选项中,加快其进度就可以缩短工程工期的是(C)

在这里插入图片描述

A.c和e B.d和c C.f和d D.f和h
解析:这题需要求出所有关键路径之后再进行比较选项,ABD中虽然是关键活动,但不能包含所有的,只有C是三条关键路径都涉及到的
在这里插入图片描述

18 设有向图G=(V,E),顶点集V={V0,V1,V2,V3},E={<V0,V1>,<V0,V2>,<V0,V3>,<V1,V3>},若从顶点V0开始对图进行深度优先遍历,则可能得到的不同遍历序列个数是(D)

A.2 B.3 C.4 D.5
解析:画出该有向图,如下图所示。从顶点V0开始对图进行深度优先遍历,共有5中可能的不同遍历序列:V0,V1,V3,V2、V0,V2,V1,V3、V0,V2,V3,V1、V0,V3,V2,V1、V0,V3,V1,V2
在这里插入图片描述

19 对于有n个顶点,e条边的有向图采用邻接表存储,则拓扑排序算法的时间复杂度为(B)

A.O(n) B.O(n+e) C.O(n^2) D.O(n*e)
解析:采用邻接表实现拓扑排序时,要通过建立入度数组来计算各顶点的入度。对于有n个顶点和e条边的有向图而言,建立入度数组的复杂度为O(e),建立零入度顶点栈的时间复杂度为O(n)。在拓扑排序过程中,若有向无环图,则每个顶点进一次栈,出一次栈,入度减1的操作在循环中执行e次,所以,总的时间复杂度为O(n+e)

20 已知无向图G有16条边,其中度为4的顶点个数为3,度为3的顶点个数为4,其他顶点的度均小于3。图G所含的顶点个数至少是(B)

A.10 B.11 C. 13 D. 15
解析:由于无向图各顶点度数的总和为边数的2倍,题目有写无向图G有16条边,所以各顶点度数的总和为32。又因为度为4的顶点个数为3,度为3的顶点个数为4,则其他顶点的度数为32-4*3-3*4=8,又因为其他顶点的度均小于3,求顶点个数最少的情况,设其度均为2,则度为2的顶点个数为8/2=4,因此图G所含的顶点个数至少是11个

21 用有向无环图描述表达式(x+y)*((x+y)/x),需要的顶点个数至少是(A)

A.5 B.6 C.8 D.9
解析:将中缀表达式转换为二叉树,再将二叉树去重转换为有向无环图,如下图所示
在这里插入图片描述

22 修改递归方式实现的图的深度优先搜索将访问顶点信息的语句移动到退出递归前(即执行输出语句后立即退出递归)。采用修改后的算法遍历有向无环图G,若输出结果中包含G中的全部顶点,则输出的顶点序列是G的(B)

A.拓扑有序序列 B.逆拓扑有序序列 C.广度优先搜索序列 D.深度优先搜索序列
解析:拓扑序列将AOV网中所有顶点排成一个线性序列,该序列满足:若在AOV网中由顶点Vi到顶点Vj有一条路径,则在该线性序列中的顶点Vi必定在顶点Vj之前。递归方式实现的DFS算法,在遍历过程中,先访问的点压到栈底,搜索路径是从最后一个被访问的顶点开始输出,最后一个输出的顶点是第一个被访问的顶点,所以输出的顶点序列是G的逆拓扑有序序列

23 若使用AOE-网估算工程进度,则下列叙述中正确的是(B)

A.关键路径是从源点到汇点边数最多的一条路径
B.关键路径是从源点到汇点路径长度最长的路径
C.增加任一关键活动的时间不会延长工程的工期
D.缩短任一关键活动的时间将会缩短工程的工期
解析:在AOE网中,从源点到汇点的带权路径长度最长的路径称为关键路径。任一活动持续时间的改变都可能引起关键路径的改变,会影响工程的工期


3.课后习题

题目

在这里插入图片描述
在这里插入图片描述

作答

在这里插入图片描述
在这里插入图片描述

答案

在这里插入图片描述
在这里插入图片描述
这章的主要内容是学会prim算法、Kruskal算法、Dijkstra算法、AOV网、AOE网、DFS遍历算法、BFS遍历算法


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构-图篇 的相关文章

  • C++(一)#pragma once用法

    C 一 pragma once用法 用法 C C 中 在使用预编译指令 include的时候 为了防止重复引用造成二义性 ifndef ifndef CODE BLOCK define CODE BLOCK code endif CODE

随机推荐

  • Python OSError: symbol cublasLtHSHMatmulAlgoInit, version libcublasLt.so.11 not defined的解决

    问题与排查 原报错信息如下 OSError opt conda lib python3 8 site packages nvidia cublas lib libcublas so 11 symbol cublasLtHSHMatmulAl
  • 动态创建class

    需要引入命名空间 using System CodeDom using System CodeDom Compiler using Microsoft CSharp using System Reflection public static
  • ASP.NET中文显示乱码之解决方法

    ASP NET很灵活 这归功于它采用文本文件方式的配置方式 另外的那种用页面标识符的方法应该是从ASP延续下来的 写ASP 程序时候碰到中文显示问题 运行后发现ASP 从数据库中读出来的中文全部变成了 解决办法 方法一 在config we
  • 程序员眼中的流量卡:需求、选择与使用

    标题 程序员眼中的流量卡 需求 选择与使用 一 流量卡的需求分析 作为程序员 我们深知数据流量在我们的工作中的重要性 无论是开发 测试还是部署 亦或是远程工作 都需要网络的支持 使用流量卡可以为我们提供一种灵活 便携的网络解决方案 让我们可
  • 如何用java POI在excel中画线_Java中使用POI在Excel单元格中画斜线—XLS格式

    Excel主要有xls和xlsx两种格式 两种格式对应的POI接口使用方法也不同 本节主要介绍一下 在xls格式的Excel单元格中如何画斜线 1 初始化HSSFWorkbook对象 初始化HSSFWorkbook对象 创建两行两列单元格
  • 【React】Fiber 实现可中断的渲染

    什么是可中断的 渲染 参照我们在 Concurrent 的奥秘 中的同步渲染和并发渲染的例子 上图是同步渲染过程 上图是并发渲染过程 我们可以看到明显的区别 同步渲染 就是完整地执行了一个很耗时的渲染 并发渲染 将原本耗时的 渲染 拆解成了
  • Labelme标注工具 json文件批量转化 labelme_json_to_dataset 多个版本代码集合

    文章目录 一 Labelme标注工具安装 二 json文件批量执行转化 代码1 问题一 问题二 代码2 代码3 一 Labelme标注工具安装 https github com wkentaro labelme 安装过程按照github教程
  • 1.单例模式之饿汉式

    单例模式总结 特点 构造方法私有 提供一个全局访问点 实现方式 有很多 分四篇分别总结1 饿汉式 2 懒汉式 3 注册式 4 ThreadLocal 优点 内存中只有一个实例 减少内存开销 避免对资源多重占用 设置全局访问点 严格控制访问
  • 【IDEA】IDEA 下一些 编码技巧

    1 概述 转载 这样写代码 真是帅到没有朋友 转载记录一下 防止下次找不到了
  • 操作系统(OS)

    目录 1 计算机系统层次 2 操作系统 2 1 概念 2 2 作用 1 计算机系统层次 2 操作系统 2 1 概念 任何计算机系统都包含一个基本的程序集合 称为操作系统 OS 操作系统包括 内核 进程管理 内存管理 文件管理 驱动管理 其他
  • ajax实现下拉框联动

    spring mvc bootstrap 最近在做一个新闻不发布网站 网站栏目需要实现下拉框联动 因为没有用到前端框架 因此需要自己来写 废话不多说 思路是 跳转到新闻发布页面 需要初始化一级目录 RequestMapping releas
  • 使用ODBC连接SQL Server数据库进行增删查改操作全过程

    include
  • 开发工具~nuget配置本地源

    我们在本地部署了自己的nuget服务器 有时可以需要用到nuget restore命令去恢复包包 它会从下面的nuget config里读你的配置源信息 就是在这里 我们要把内测的nuget服务器路径添加上 这样就可以了 NUGET服务配置
  • 12V输入给三节锂电池充电芯片

    12V输入3A三节锂电池充电 可用于车载给PDA MP3 MP4 数码相机 PSP游戏机 笔记本等电子数码产品充电 2A多单元高效率开关充电器 概述 HU3208A是4 0V 23V输入 2A多单元同步降压型锂离子电池充电器 适用于便携式应
  • CH5-树和二叉树

    文章目录 5 1树和二叉树 5 1 1 树的定义 5 1 2基本术语 5 1 3二叉树的定义 5种基本形态 5 2案例引入 案例1 数据压缩问题 案例2 求解表达式的值 5 3抽象数据类型定义 5 4二叉树的性质 性质1 性质2 性质3 两
  • 数据结构与算法c语言版胡明课后答案,算法设计与分析(第2版) 王红梅 胡明 习题答案...

    O N x 2 O N 2 2 x a O N x a 2 O N 2 x x 2 a O N 2 a 1 x 由此可知 时间复杂度可达到O n 3 分治策略一定导致递归吗 如果是 请解释原因 如果不是 给出一个不包含递归的分治例子 并阐述
  • @PathVariable接收两个参数

    首先 PathVariable无法接收对象 但是可以接收多个值 var data obj data if obj event edit var tmpData encodeURI JSON stringify data layer open
  • vue_前后端分离-增删改操作

    增加操作和修改操作 两个操作放一个页面进行操作 使用插槽 scope row 的方式获取列表中的每一行数据
  • 在Android上实现SPI通信之(1)------在Ubuntu12.04环境下编译android源码

    作为一个Android应用开发者 突然接到一下需求 需要在应用层传递一个信号到外设 传递方式用SPI通信 没有做过 甚是头大 遇到了好多坑 所以记录成册 希望对后来的开发者 有那么一点点的帮助 如果有不正确的地方 还请指正 目前我实现的大体
  • 数据结构-图篇

    数据结构 图篇 内容 思维导图 基于教材 错题复盘 计算题 基于习题解析 课后习题 1 思维导图 2 错题复盘 计算题 1 具有n个顶点的有向图最多有 B 条边 A n B n n 1 C n n 1 D n 2 解析 对于有n个顶点的有向