有向无环图的拓扑排序——CSP-J1真题讲解

【题目】

考虑一个有向无环图,该图包括4条有向边:(1,2),(1,3),(2,4),和(3,4)。以下哪个选项是这个有向无环图的一个有效的拓扑排序?( )

A. 4, 2, 3, 1

B. 1, 2, 3, 4

C. 1, 2, 4, 3

D. 2, 1, 3, 4

【解析】

本题考查有向无环图(DAG)的拓扑排序问题。

这里面涉及到3个概念:

1.有向无环图(DAG,Directed Acyclic Graph)

所谓的图,就是一堆节点和边。图好比是一张情网,节点是情网中的人,边是情网中人和人的关系。

有向指两个节点间的关系是有方向的,就好比两个人如果有关系,只能是单相思关系。

环是指从一个顶点出发,经过一系列边和顶点后,最终又回到该起点的路径。无环就是图中没有这样的环,也就是说不会返回起点。

2.有向边

前面说过边表示两个节点的关系,有向边就是表示有方向性的关系。比如有这么两个人:u和v,它们的关系是u爱v,而v不爱u。要表示这种单相思关系可以用“(u,v)”的形式表示,称作“节点u指向节点v”,画成图就是下面这样子:

这条带箭头的线就是“有向边”了。

3.拓扑排序

拓扑是个音译词,来自topology(拓扑学)中的topo。topo的本义是place(地点、位置),这是一个数学上的概念,含义很复杂,我们可以简单地理解拓扑排序是关于“前后位置”的排序。

对于一个有向无环图,拓扑排序是将图的所有顶点排成一个线性序列,使得对于每一条有向边 (u,v),顶点 u 在序列中出现在顶点 v 的前面。

还是拿单相思情网举例,拓扑排序相当于要把所有困在情网中的人排成一队。排队时要保证任何有单相思关系的两个人,关系的生产者(相思者)排在消费者(被相思者)之前。

下面就来做一下这道题,题中给出了4条有向边:(1,2),(1,3),(2,4),和(3,4),也就是4种单相思关系:1爱2,1爱3,2爱4,3爱4。用图表示为:

这个图的有效拓扑排序必须要同时满足上图的4种关系。

其实这种关系更像是一种任务或课程的先后关系,比如上图就是课程1要排在课程2、3之前,课程2要排在课程4之前,课程3要排在课程4这前。求它的拓扑排序就相当于要你对这4门课进行排序。

现在要找出答案非常简单,只需要按每个选项的顺序在图上走一遭,如果和图中箭头方向没有冲突,就是有效的。

A. 4, 2, 3, 1:第1步就违反了图中的方向关系,排除。

B. 1, 2, 3, 4:没有违反图中的方向关系,因为2、3节点间没有关系,怎么来都行,正确。

C. 1, 2, 4, 3:4、3间违反了图中的方向关系,3应在4之前。

D. 2, 1, 3, 4:第1步违反了图中的方向关系,排除。

是不是很简单呢?

这道题就是名词唬人,实际没什么难度。

就算你完全不知道这些名词的含义,按理也应该能求出答案。你看到 (1,2),(1,3),(2,4),(3,4)这样的数据,这是什么样的数据呢?前面有那么明晃晃的两个字——有向。所以这组数据一定是和表示方向有关系。什么样的方向呢?人家都说是“拓扑排序”了,你管他娘的什么“拓扑”,只要知道是“排序”就足够了。你就纯把它当成对数字排序,所以这种方向关系一定指的是数字的前后。所以,管它什么鸟图、鸟拓扑,你还想不到把选项中数字与这组数据的前后关系作对比吗?只要二者前后关系相一致,那就是答案呗。

【题目来源】

2023 CCF非专业级别软件能力认证第一轮 (CSP-J1) 入门级C++语言试题 第12题

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

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

相关文章

selenium操作已开启的浏览器,方便调试

一、谷歌浏览器配置: 在所安装的谷歌下面,执行下面命令,打开谷歌浏览器,用来selenium的操作: 注意事项:端口需要不被占用,--user-data-dir"D:\workspace\chrome-data"这个路径需要有…

DAY75WEB 攻防-验证码安全篇接口滥用识别插件复用绕过宏命令填入滑块类

知识点: 1、验证码简单机制-验证码过于简单可爆破 2、验证码重复使用-验证码验证机制可绕过 3、验证码智能识别-验证码图形码被可识别 4、验证码接口调用-验证码触发接口可枚举 图片验证码-识别插件-登录爆破&接口枚举 验证码识别绕过等技术适用于&#x…

微信小程序生成二维码

目前是在开发小程序端 --> 微信小程序。然后接到需求:根据 form 表单填写内容生成二维码(第一版:表单目前需要客户进行自己输入,然后点击生成按钮实时生成二维码,不需要向后端请求,不存如数据库&#xf…

海的回忆:海滨学院班级记忆录技术实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

注册页面设计(表单基础)

HTML表单是网页中用于收集用户输入信息的区域&#xff0c;它包含了一系列交互控件&#xff0c;允许用户输入数据&#xff0c;并将这些数据发送到Web服务器进行处理。以下是HTML表单的基础知识&#xff1a; 一、表单的基本结构 HTML表单由<form>标签定义&#xff0c;表单…

003-Kotlin界面开发之声明式编程范式

概念本源 在界面程序开发中&#xff0c;有两个非常典型的编程范式&#xff1a;命令式编程和声明式编程。命令式编程是指通过编写一系列命令来描述程序的运行逻辑&#xff0c;而声明式编程则是通过编写一系列声明来描述程序的状态。在命令式编程中&#xff0c;程序员需要关心程…

OPENAI官方prompt文档解析

官方文档地址:https://platform.openai.com/docs/guides/gpt-best-practices 文档中文版来源:OpenAI 官方提示工程指南 [译] | 宝玉的分享 (baoyu.io) 1.写清楚说明 如果prompt给的范围十分模糊或是过于宽泛,那么GPT就会开始猜测您想要的内容,从而导致生成的结果偏离预期. …

代理IP地址和端口是什么?怎么进行设置?

保护个人隐私、突破地域限制、提升网络安全性是我们不断追求的目标。而代理IP地址和端口就是一种实现这些目标的重要工具。但是&#xff0c;你可能对它是什么&#xff0c;以及如何设置感到困惑。别担心&#xff0c;本文将为你揭开这些神秘的面纱&#xff0c;让你轻松掌握这项技…

【uniapp3】分享一个自己写的h5日历组件

简言 分享一下自己基于uniapp写的日历组件。如果不太满足你的需求&#xff0c;可以自己改造。 日历 实现分析&#xff1a; 页面显示 - 分为顶部显示和日历显示&#xff0c;我这里做了多行和单行显示两种情况&#xff0c;主要是当时看着手机的日历做的&#xff0c;手机上的…

rhce作业4

问题&#xff1a; 1.搭建dns服务器能够对自定义的正向或者反向域完成数据解析查询。 2.配置从DNS服务器&#xff0c;对主dns服务器进行数据备份。 配置&#xff1a; 主服务器配置 安装 关闭防火墙 主配置文件定义正反向解析域 正向解析资源记录文件 反向解析记录文件 重启…

MybatisPlus入门(八)MybatisPlus-DQL编程控制

一、字段映射与表名映射 数据库表和实体类名称一样自动关联&#xff0c;数据库表和实体类有部分情况不一样。 问题一&#xff1a;表名与编码开发设计不同步&#xff0c;表名和实体类名称不一致。 解决办法&#xff1a; 在模型类上方&#xff0c;使用TableName注解&#xf…

摩尔斯电码

偏方记忆法 F .._. 滴滴打滴 很费钱 F 费 R ._. 滴打滴 洗发水广告 滴答滴&#xff0c;滴答滴 大家好才是正的好 G 和Q 可以一起记忆有相通点 把G 也看成一个圈&#xff0c;相交的地方一个点&#xff0c;因为圈没满缺一个_ K 和 Y 可以一起记忆 把K躺着看…

Vue Router进阶详解

导航守卫 若依框架登录鉴权详解&#xff08;动态路由&#xff09;_若依鉴权-CSDN博客 完整的导航解析流程 导航被触发&#xff1a; 当用户点击页面中的链接、使用编程式导航&#xff08;如router.push或router.replace&#xff09;或手动输入URL时&#xff0c;导航流程被触发。…

如何在Linux命令行中使用GhatGPT

2、验明正身&#xff0c;证明我的所在地是国内 3、第一次提问 4、第二次提问 5、问他一首古诗 6、话不多说&#xff0c;现在来展示他的安装过程 7、输入GitHub的网址 https://github.com/aandrew-me/tgpt 8、详情页向下翻 9、到终端输入 下列命令&#xff0c;等待安装&#x…

iOS灵动岛动画小组件怎么播放动画

这个灵动岛相关的展示位置分几个地方&#xff1a; 紧凑型&#xff0c;最小化&#xff0c;扩展型&#xff0c;还有锁屏位置 我们先来看一下我这边实现的动画效果 demo下载&#xff1a; iOS灵动岛GIF动画 灵动岛样式 灵动岛有三种渲染模式&#xff1a; 第一种是 紧凑型&…

【electron+vue3】使用JustAuth实现第三方登录(前后端完整版)

实现过程 去第三方平台拿到client-id和client-secret&#xff0c;并配置一个能够外网访问回调地址redirect-uri供第三方服务回调搭建后端服务&#xff0c;引入justauth-spring-boot-starter直接在配置文件中定义好第一步的三个参数&#xff0c;并提供获取登录页面的接口和回调…

vscode makfile编译c程序

编译工具安装 为了在 Windows 上安装 GCC&#xff0c;您需要安装 MinGW-w64。 MinGW-w64 是一个开源项目&#xff0c;它为 Windows 系统提供了一个完整的 GCC 工具链&#xff0c;支持编译生成 32 位和 64 位的 Windows 应用程序。 1. 下载MinGW-w64源代码&#xff0c;如图点…

这个操作惊呆我了!海康存储 R1竟然可以这样部署Portainer

这个操作惊呆我了&#xff01;海康存储 R1竟然可以这样部署Portainer 哈喽小伙伴们好&#xff0c;我是Stark-C~ 最近到手了海康存储&#xff08;HIKVISION&#xff09;私有云R1 &#xff0c;该机的卖点还是很多的&#xff0c;比如优秀的做工&#xff0c;强大的配置&#xff0…

雷电模拟器ls内部操作adb官方方法

正常情况下&#xff0c;我们通过adb操作模拟器&#xff0c;如安装软件、运行shell命令等&#xff0c;但是用windows系统&#xff0c;adb就经常掉线&#xff0c;端口被占用&#xff0c;或者发现不到设备&#xff0c;对于调试或者自动化非常痛苦。就在雷电安装目录下&#xff0c;…

TS学习笔记

一、TS运行环境搭建 1、安装 安装命令 npm i -g typescript 第一步&#xff1a;新建index.html和demo.ts 第二步&#xff1a;在index.html引入demo.ts文件 第三步&#xff1a;运行TS的命令 tsc demo.ts 注意&#xff1a;运行命令后&#xff0c;会将ts文件转换成js文件 …