【数据结构入门精讲 | 第十八篇】考研408、企业面试图专项练习(一)

在上一篇中我们学习了图的相关知识点,在这一篇中我们进行图的专项练习。

在这里插入图片描述

目录

    • 判断题
    • 选择题
    • 编程题
      • R7-1 社交网络图中结点的“重要性”计算
      • R7-2 列出连通集
      • R7-3 分而治之

判断题

1

选择两城市间最经济的航行路线用迪杰斯特拉算法(对)

2

从某顶点出发进行深度优先遍历,最先退出dfs过程的是拓扑序列的最后一个顶点。(对)

3

对任意一个图,从某顶点出发进行一次深度优先或广度优先遍历,可访问图的所有顶点。(错)
若存在回路,则结束遍历,剩下的节点就不能被访问。

4

检查有向图是否存在回路的一种方法是使用无前驱顶点优先算法对有向图进行拓扑排序。( 对 )

5
一个邻接矩阵如下:

0 1 1 0 1 0
1 0 0 1 0 0
1 0 0 0 1 1
0 1 0 0 1 0
1 0 1 1 0 1
0 0 1 0 1 0

若用广度优先进行遍历,则可能得到的顶点序列为?

解,由邻接矩阵可得:
第一行第二列、第一行第三列、第一行第五列为1,所以
1>2,1>3,1>5,即1>2>3>5
同理
2>1>4
3>1>5>6
4>2>5
5>1>3>4>6
6>3>5
所以1>2>4>5>6>3是可能的

6
如果G是有28条边的连通无向图,则顶点个数为多少?
解:除孤立点外,n个顶点构成的无向完全图最多有n(n-1)/2条
故解得n为8,加上孤立点,故顶点个数为9

7在这里插入图片描述解析:图是非线性的,表示多对多的关系。

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

解析:无向连通图是指对图中任意顶点u,v,都存在路径使u、v连通。o--o--o
这是无向连通图,边数为2,不会大于顶点数减一

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

解析:o/ \o - o
每个顶点的度为2  

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

14在这里插入图片描述

15、16
在这里插入图片描述

解析:
对于15,c可能在a、b之间,也可能在a、b之外,故对16不再赘述。

17在这里插入图片描述

18
在这里插入图片描述
解析:不一定,如图,5到4的路径并不是最短路径

在这里插入图片描述

19
在这里插入图片描述

20在这里插入图片描述

21
在这里插入图片描述
22在这里插入图片描述
23若图G有环,则G不存在拓扑排序序列。(对)

解析:拓扑排序的前提是有向无环图

在这里插入图片描述
24如果从有向图 G 的每一点均能通过深度优先搜索遍历到所有其它顶点,该图一定不存在拓扑序列(对)

选择题

1.对于一个具有 N 个顶点,m条边的无向图,若采用邻接表来表示,则该邻接表的大小是?

对于无向图,每个顶点最多与其他 N-1 个顶点相连,因此邻接表的大小为 O(N)。而每条边都会在邻接表中占用一个节点,所以边的数量 m 也会影响邻接表的大小。综合起来,邻接表的大小是 O(m + N)。

2.采用邻接矩阵存储图时,广度优先搜索遍历算法的时间复杂度为 C

A. O(n) B. O(n+e) C. O(n^2) D. O(n^3)

3
在这里插入图片描述

矩阵为N阶矩阵,故选B

4在这里插入图片描述

125
137
1411
154
169排序得到4 5 7 9 11
即对应 5 2 3 6 4

5在这里插入图片描述

6.如果从无向图的任一顶点出发进行一次深度优先搜索即可访问所有顶点,则该图一定是(连通图)

7.下列说法正确的是( D )。
A、连通分量是无向图的极小连通子图
B、生成树是无向图的极大连通子图
C、具有n个顶点,少于n-1条边的无向图可能是连通图
D、具有n个顶点,多于n-1条边的无向图必存在环

8在这里插入图片描述

对于活动最早开始时间,找线段中没有箭头的一端,取该端的最早开始时间
例如b
b没有箭头的一端为3
3的最早开始时间为8,所以写8

9在这里插入图片描述

10在这里插入图片描述
在这里插入图片描述
11在这里插入图片描述
12在这里插入图片描述
13
在这里插入图片描述
14
在这里插入图片描述

6个顶点的无向图最多15条边
3个顶点的无向图最多3条边
6个顶点15条边的图和3个顶点2条边的图以及41个顶点,共计43个连通分量
7个顶点的无向图最多21条边,
7个顶点17条边的图和43个顶点,共计44个连通分量,此时满足最大的要求

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

17.具有 100 个顶点和 12 条边的无向图至多有多少个连通分量?(95)

n个顶点的无向图最多有n(n-1)/2条边
n个顶点的无向图最少有n-1条边而6个顶点最多有15条边
所以
将100个顶点中拿六个顶点构成12条边,形成一个连通分量
此时剩94个点,让它们不相连、各自成为点,所以剩下的94个顶点有94个连通分量,共95个连通分量

编程题

R7-1 社交网络图中结点的“重要性”计算

在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来。他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互作用,可以增强也可以减弱。而结点根据其所处的位置不同,其在网络中体现的重要性也不尽相同。

在这里插入图片描述
输入样例:

9 14
1 2
1 3
1 4
2 3
3 4
4 5
4 6
5 6
5 7
5 8
6 7
6 8
7 8
7 9
3 3 4 9

输出样例:

Cc(3)=0.47
Cc(4)=0.62
Cc(9)=0.35
#include <bits/stdc++.h>
using namespace std;
const int N = 1010, M = 10010, INF = 1e9;
long long res = 0; // 存储最短路径之和
int n, m, q, x;   // n为顶点数,m为边数,q为查询次数,x为查询的顶点编号
int d[N][N];      // 存储图中每对顶点之间的距离// Floyd算法求解最短路径
void floyd() {for (int k = 1; k <= n; k++) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {d[i][j] = min(d[i][j], d[i][k] + d[k][j]);}}}
}int main() {cin >> n >> m; // 输入顶点数和边数// 初始化距离矩阵for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (i == j)d[i][j] = 0;elsed[i][j] = INF;}}// 输入边的信息,更新距离矩阵for (int i = 0; i < m; i++) {int a, b;cin >> a >> b;d[a][b] = d[b][a] = 1;}floyd(); // 求解最短路径cin >> q; // 输入查询次数bool fg = false;for (int i = 0; i < q; i++) {res = 0;cin >> x; // 输入查询的顶点编号// 如果有顶点到其他顶点的最短路径为无穷大,则无法计算Cc(x),直接输出0.00if (!fg) {for (int j = 1; j <= n; j++) {if (x == j)continue;if (d[x][j] > INF / 2) {fg = true;break;}res += d[x][j];}}if (fg)printf("Cc(%d)=0.00\n", x);else {double ans = (double)(n - 1) / res;printf("Cc(%d)=%.2lf\n", x, ans); // 输出结果,保留两位小数}}return 0;
}

R7-2 列出连通集

给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

输入格式:

输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。

输出格式:

按照"{ v1 v2 … vk }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。

输入样例:

8 6
0 7
0 1
2 0
4 1
2 4
3 5

输出样例:

{ 0 1 4 2 7 }
{ 3 5 }
{ 6 }
{ 0 1 2 7 4 }
{ 3 5 }
{ 6 }
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int a[15][15], vis[15];  // 定义邻接矩阵a和访问标记数组vis
int n, e;  // 定义顶点数n和边数evoid DFS(int x)
{vis[x] = 1;  // 标记顶点x为已访问for (int i = 0; i < n; i++){if (a[x][i] == 1 && vis[i] == 0)  // 若顶点i与x相连且未访问过{printf(" %d", i);  // 输出顶点iDFS(i);  // 递归访问顶点i的相邻顶点}}
}void BFS(int x)
{int q[15];  // 定义队列q用于广度优先搜索int front = -1, rear = -1;  // 定义队列的头尾指针vis[x] = 1;  // 标记顶点x为已访问q[++rear] = x;  // 将顶点x入队while (rear > front){int t = q[++front];  // 出队一个顶点tfor (int i = 0; i < n; i++){if (a[t][i] == 1 && vis[i] == 0)  // 若顶点i与t相连且未访问过{printf(" %d", i);  // 输出顶点ivis[i] = 1;  // 标记顶点i为已访问q[++rear] = i;  // 将顶点i入队}}}
}int main()
{scanf("%d %d", &n, &e);  // 输入顶点数n和边数ewhile (e--){int u, v;scanf("%d %d", &u, &v);a[u][v] = 1;  // 标记顶点u和v之间有边a[v][u] = 1;  // 无向图需要将邻接矩阵对称}memset(vis, 0, sizeof(vis));  // 初始化访问标记数组vis为0for (int i = 0; i < n; i++)  // 对每个顶点进行遍历{if (vis[i] == 0)  // 如果顶点i未被访问过{printf("{ %d", i);  // 输出当前连通分量的起始顶点iDFS(i);  // 对以i为起点的连通分量进行深度优先搜索printf(" }\n");}}memset(vis, 0, sizeof(vis));  // 重新初始化访问标记数组vis为0for (int i = 0; i < n; i++)  // 对每个顶点进行遍历{if (vis[i] == 0)  // 如果顶点i未被访问过{printf("{ %d", i);  // 输出当前连通分量的起始顶点iBFS(i);  // 对以i为起点的连通分量进行广度优先搜索printf(" }\n");}}return 0;
}

R7-3 分而治之

分而治之,各个击破是兵家常用的策略之一。在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破。为此参谋部提供了若干打击方案。本题就请你编写程序,判断每个方案的可行性。

输入格式:

输入在第一行给出两个正整数 N 和 M(均不超过10 000),分别为敌方城市个数(于是默认城市从 1 到 N 编号)和连接两城市的通路条数。随后 M 行,每行给出一条通路所连接的两个城市的编号,其间以一个空格分隔。在城市信息之后给出参谋部的系列方案,即一个正整数 K (≤ 100)和随后的 K 行方案,每行按以下格式给出:

Np v[1] v[2] ... v[Np]

其中 Np 是该方案中计划攻下的城市数量,后面的系列 v[i] 是计划攻下的城市编号。

输出格式:

对每一套方案,如果可行就输出YES,否则输出NO

输入样例:

10 11
8 7
6 8
4 5
8 4
8 1
1 2
1 4
9 8
9 1
1 10
2 4
5
4 10 3 8 4
6 6 1 7 5 4 9
3 1 8 4
2 2 8
7 9 8 7 6 5 4 2

输出样例:

NO
YES
YES
NO
NO
#include <bits/stdc++.h>
using namespace std;
vector<int>v[10001];  // 定义图的邻接表表示,v[i]表示与顶点i相邻的所有顶点
int n, m;  // 定义顶点数n和边数m
int book[10001];  // 定义标记数组book,用于标记顶点是否属于给定的顶点集合bool cmp(int n)
{int i, j;for (i = 0; i < n; i++)  // 遍历所有顶点{for (j = 0; j < v[i].size(); j++)  // 遍历与顶点i相邻的所有顶点{if (!book[i] && !book[v[i][j]])  // 如果顶点i和v[i][j]都不属于给定的顶点集合return false;  // 返回false,说明当前顶点集合不是一个连通块}}return true;  // 如果遍历完所有顶点和相邻顶点都符合条件,则返回true,说明当前顶点集合是一个连通块
}int main()
{scanf("%d %d", &n, &m);  // 输入顶点数n和边数mint a, b;for (int i = 0; i < m; i++)  // 输入每条边,构造邻接表{scanf("%d %d", &a, &b);v[a].push_back(b);v[b].push_back(a);}int k;scanf("%d", &k);  // 输入需要判断的顶点集合个数for (int i = 0; i < k; i++)  // 遍历每个需要判断的顶点集合{int np;scanf("%d", &np);  // 输入当前顶点集合的大小int city;memset(book, 0, sizeof(book));  // 初始化标记数组book为0for (int j = 0; j < np; j++)  // 输入当前顶点集合中的每个顶点,并标记为1{scanf("%d", &city);book[city] = 1;}if (cmp(n) == true)  // 判断当前顶点集合是否是一个连通块printf("YES\n");elseprintf("NO\n");}return 0;
}

以上就是图的相关练习,在下一篇中我们还会继续对图的编程进行讲解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528163.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos系统服务器关机,centos 7 重启服务器

centos 7 重启服务器 内容精选换一换本节操作介绍Linux操作系统云服务器在单用户模式下重置密码的操作步骤。本文档适用于X86架构的弹性云服务器。进入单用户模式下重置root密码前请先做好数据备份。请根据操作系统类型选择操作步骤&#xff1a;CentOS 8系列CentOS 7/EulerOS 系…

Nmap云主机端口扫描

Nmap云主机端口扫描 前言 一、nmap简介 Nmap是一个网络连接端扫描软件&#xff0c;用来扫描网上电脑开放的网络连接端。确定哪服务运行在那些连接端&#xff0c;并且推断哪个操作系统计算机运行(这是亦称fingerprinting)。 它是网络管理员必用的软件之一&#xff0c;以及用以评…

云存储技术-Zookeeper集群的安装

云存储技术 实验目的要求&#xff1a; 1、掌握在完全分布模式的整合平台中Zookeeper的安全分布模式的安装 2、完成Zookeeper的完全分布模式的安装 3、Zookeeper服务能够正常启动和连接 4、Zookeeper控制台能够正常进入 5、Zookeeper控制台命令能够正常使用 实验环境 &#xf…

云存储技术-JDK的安装

云存储技术-JDK的安装 实验目的要求&#xff1a; 1、掌握在完全分布模式的整合平台中快捷的进行JDK的安装和验证 2、在集群中所有主机上完成JDK的安装 3、所有主机上JDK相关命令能够正常使用 实验环境&#xff1a; 1、五台独立PC机或虚拟机 2、主机之间有有效的网络连接 3、每…

go 字符串转日期_Go技术日报(20200831)

go 语言中文网(每日资讯)_2020-08-31一、Go 语言中文网动态作用域&#xff1f;Dave Cheney 大神由 Go 单元测试惯用形式所想Go 实战&#xff1a;实现一个简单的日志库Go&#xff1a;基于 HTTP Header 传输签名参数二、亚军进化史Go 技术日报(2020-08-30)三、polarisxu为 jinzhu…

Linux相关配置 集群免密码登录配置

Linux相关配置 集群免密码登录配置 实验目的要求&#xff1a; 1、完成VMware Workstation安装&#xff0c;会应用相关操作 2、掌握虚拟机中Linux CentOS 7.4操作系统安装 3、完成静态网络地址的配置&#xff0c;所有主机的网络能够正常使用&#xff0c;相互之间能够正常连接 4…

做旋转铁甲机器人_「铁甲评测」柳工CLG921E视频全面讲解

本文由铁甲论坛甲友邢飞 2020-07-03 原创发布&#xff0c;转载请标注来源&#xff1a;先生们&#xff0c;女士们。请把你们的烦恼放在一边&#xff0c;大家来仔细聆听我的塑料普通话咯&#xff01;听闻朔州有特大工程要开&#xff0c;居然一次性购买了二十多台柳工挖掘机&#…

win10打印机终结点映射器_用了就回不去?微软官方免费“外挂”,让win10好用到飞起...

大白菜掐指一算&#xff0c;win10系统已经5岁了呀……果然是熊孩子的阶段&#xff0c;让人闹心……虽然win10系统有很多功能&#xff0c;确实是相当不错&#xff0c;但是win10各种令人吐槽的点也不少呀&#xff0c;比如说搜索功能&#xff0c;大家显然更喜欢Listary、everythin…

运维工程师是桥的护栏_【消息】秭归将建螺旋桥

秭归将在金湖路建设螺旋桥金湖路位于秭归县城沿江地带&#xff0c;规划为城市支路&#xff0c;是县城金缸城片区连接港口区和上下主干路(滨湖路)的重要通道。金湖路起于秭归县滨湖路与龙舟路交叉口处&#xff0c;终于天问路与花园路交叉口西南方向约200米处&#xff0c;路线全长…

rocketmq 几种队列_关于RocketMQ的知识

上篇文章给大家简单介绍了一下RocketMQ&#xff0c;今天给大家说一说几款MQ产品有什么区别。目前市面上常用的MQ有&#xff1a;1、RocketMQ 2、RabbitMQ 3、ActiveMQ 4、Kafka 5、ZeroMQ一、几种MQ的介绍①RocketMQ阿里系下开源的一款分布式、队列模型的消息中间件&#xff0c;…

apache 设置session超时时间_深入分析 Session 和 Cookie,看这篇就对了

点击上方 "程序员小乐"关注, 星标或置顶一起成长 第一时间与你相约 每日英文 Promise yourself to be so strong that nothing can disturb your peace of mind. 对自己承诺&#xff1a;我要强大到任何事情都无法破坏我内心的平和。 每日掏心话 每一发奋努力的背后&a…

js制定一个单选按钮_【下】每个月整理发票太头疼?手把手教你快速开发一个工具解决!...

"NightTeam"&#xff0c;一个值得加星标的公众号。在上篇中&#xff0c;我们已经将我们的发票管理工具开发到了能一键导入发票、能看到效果、能仍然不太方便地管理的状态&#xff0c;接下来我们来继续将还没有加进去的那些方便的功能给加上&#xff0c;以将管理发票的…

ai怎么让图片任意变形_想一键提取图片文字,有什么好的文字识别软件/APP推荐吗?...

工作也有一段时间了&#xff0c;有时候需要把图片中的文字提取出来&#xff0c;转换成电子档式&#xff0c;一开始的时候可能是傻吧&#xff0c;也没想到借用工作减少工作量&#xff0c;就知道埋头拼命敲敲打打&#xff0c;文字比较少的时候还好&#xff0c;多了简直...得颈椎病…

隐藏功能_IOS 14.2 隐藏功能

FaceTime隐藏功能现身&#xff0c;只要设备运行 iOS 14.2 系统&#xff0c;iPhone 8 或更新的机型都可以以 1080p 分辨率进行视频通话&#xff0c;1080p什么概念&#xff0c;平时看视频应该最有感触。FaceTime 是什么&#xff1f;可能有些小伙伴压根儿就没听说过这个功能。Face…

SSH框架(Struts+Spring+Hibernate)

在SSH 的组合框架模式中&#xff0c;三者各自的作用&#xff1f; Struts 是一个很好的MVC框架&#xff0c;主要技术是Servlet和Jsp。Struts的MVC设计模式可以使我们的逻辑变得很清晰&#xff0c;让我们写的程序层次分明。基于Struts开发可以简化开发难度&#xff0c;提高开发效…

d630无电池升级bios_太重要,你想要的电脑BIOS全面解读与设置(下)

设置意外断电后恢复状态通常在电脑意外断电后&#xff0c;需要重新启动电脑&#xff0c;但在 BIOS 中可以对断电恢 复进行设置&#xff0c;一旦电源恢复&#xff0c;电脑将自动启动。下面就在 UEFIBIOS 中设置电 脑的自动断电后重启&#xff0c;具体操作步骤如下。 STEP 1 选择…

MySQL的乱码解决方案

1.如果第一次安装MySQL数据库: 在选择编码时&#xff0c;选择最后一项&#xff0c;并指定编码为utf8或者gbk&#xff08;这两种编码支持中文,是我们比较常用的&#xff09; 如果已经按照完成了MySQL数据库&#xff0c;那么可以进行重新配置修改: 在开始菜单中找到: 然后重复第…

pg数据库开启远程连接_疫情之下,开启在家办公模式,远程连接工具篇之向日葵...

1月30号本来就要返程去上班了&#xff0c;接到公司通知&#xff0c;根据当前疫情的形势&#xff0c;假期延长到3号&#xff0c;退车票&#xff0c;候补抢票一顿操作&#xff0c;将票改到了3号&#xff0c;3号又接到通知假期延长到10号。作为一个一线的销售人员&#xff0c;工作…

谈谈对MVC的理解(View+Model+Controller)

1) 什么是MVC&#xff1f; MVC是一种设计思想&#xff0c;根据职责不同将程序中的组件分成以下3个部分。 V&#xff08;View视图&#xff09;&#xff1a;负责与用户交互。将数据展现&#xff0c;或者是接收数据 M&#xff08;Model模型&#xff09;&#xff1a;负责业务处理。…

物理搬砖问题_全职业通用,搬砖市场装备

更多原创文章可关注微信公众号&#xff1a;地下城勤帝 查看大家好&#xff0c;我是勤帝&#xff0c;我只写大家能看懂的文章搬砖市场的角色更新了一些&#xff0c;装备都有所不同&#xff0c;今天我给大家一个可以通用的装备&#xff0c;这套装备虽然成型不快&#xff0c;但是…