当前位置: 首页 > news >正文

117. 软件构建,拓扑排序,47. 参加科学大会,dijkstra算法

117. 软件构建

拓扑排序

思路:

  • 找到入度为0的节点,并添加到result数组中
  • 将该节点从图中移除,并删除其相连的边
  • 重复执行这个过程
  • 如果result数组的长度 == 图的节点数目,则证明这个图的所有节点可以构成一颗树;否则,则证明图中存在环路。

拓扑排序广搜Code

## 如果能全部处理后所有文件,则输出处理文件的路径(非唯一)。
## 即判断这个图的所有节点能否构成一颗树from collections import deque, defaultdictif __name__ == "__main__":document_size, edge_size = map(int, input().split())graph = [[0]*document_size for _ in range(document_size)]in_edge = [0] * document_size  ## 初始化一个入度数组result = []umap = defaultdict(list)       ## 存储文件的依赖关系。一个字典,key是int, value是listqueue = deque()                ## 存储入度为0的节点for _ in range(edge_size):S_document, T_document = map(int, input().split())umap[S_document].append(T_document)in_edge[T_document] += 1for i in range(document_size):if in_edge[i] == 0:queue.append(i)           ## 存储第一轮入度为0的节点,如果这一轮没有入度为0的节点,那么直接输出-1if len(queue) == 0:print(-1) while queue:            ## 队列不为空,证明存在入度为0的节点cur_document = queue.popleft()result.append(cur_document)     ## 添加此次入度为0的点for next_document in umap[cur_document]:    ## 当前document指向next_document的边删除    in_edge[next_document] -= 1             ## 更新in_edgeif in_edge[next_document] == 0:         ## 确保继承关系queue.append(next_document)if len(result) != document_size:print(-1)else:print(" ".join(map(str, result)))

注意:

要熟悉掌握从collections packiage去使用队列deque,和字典defaultdict的方法。

umap = defaultdict(list) 在这里umap使用了defaultdict,因此是一个字典,而里面是list,则说明了该字典的value是一个数组,掌握这种方式很有利于本题去找到入度为0的点指向的下一个节点。

47. 参加科学大会

dijkstra算法

http://www.dtcms.com/a/338587.html

相关文章:

  • webpack》》Plugin 原理
  • VSCode 从安装到精通:下载安装与快捷键全指南
  • 视觉采集模块的用法
  • 企业知识管理革命:RAG系统在大型组织中的落地实践
  • 大数据数据库 —— 初见loTDB
  • 最新研究进展:2023-2025年神经机器翻译突破性成果
  • 【无标题】基于大数据+Python的共享单车骑行数据分析关系可视化 基于Spark+Hadoop的共享单车使用情况监测与数据可视化
  • AI 药物发现:化学分子到机器学习数值特征的转化——打通“化学空间”与“模型空间”关键路径
  • 大语言模型基本架构
  • 全网首发CentOS 7.6安装openGauss 6.0.2 LTS企业版(单机)
  • Linux------《零基础到联网:CentOS 7 在 VMware Workstation 中的全流程安装与 NAT 网络配置实战》
  • vue3实现实现手机/PC端录音:recorder-core
  • Apache IoTDB(4):深度解析时序数据库 IoTDB 在Kubernetes 集群中的部署与实践指南
  • Chrome原生工具网页长截图方法
  • 实现Johnson SU分布的参数计算和优化过程
  • STM32 vscode 环境, 官方插件
  • 进程通信:进程池的实现
  • JUC之CompletableFuture【上】
  • PythonDay31
  • 力扣(电话号码的字母组合)
  • 如何安全删除GitHub中的敏感文件?git-filter-repo操作全解析
  • STM32 定时器(主从模式实现 3路PWM相位差)
  • c#联合halcon的基础教程(案例:亮度计算、角度计算和缺陷检测)(含halcon代码)
  • 运维监控prometheus+grafana
  • 深入理解Java中的四类引用:强、软、弱、虚引用
  • 【科研绘图系列】R语言绘制多组火山图
  • 第六天~提取Arxml中CAN Node节点信息Creat_ECU
  • STL库——string(类模拟实现)
  • ETLCloud中的数据转化规则是什么意思?怎么执行
  • QT示例 基于Subdiv2D的Voronoi图实现鼠标点击屏幕碎裂掉落特效