代码随想录算法训练营day72 | 117. 软件构建、47. 参加科学大会

本次题目来自于卡码网

117. 软件构建(拓扑排序)

python设置默认值

from collections import defaultdict
aa = defaultdict(int)

拓扑排序:找到入度为0的节点,然后移除。如果最后都能移除,则无环,可以排序。

import collections
if __name__ == '__main__':n, m = map(int, input().strip().split())inDegree = [0] * n  # 记录每个文件的入度umap = collections.defaultdict(list)  # 记录文件依赖关系result = []  # 记录结果for _ in range(m):s, t = map(int, input().strip().split())inDegree[t] += 1  # t的入度加一umap[s].append(t)  # 记录s指向哪些文件queue = collections.deque()for i in range(n):# 入度为0的文件,可以作为开头,先加入队列if inDegree[i] == 0:queue.append(i)while queue:cur = queue.popleft()  # 当前选中的文件result.append(cur)files = umap[cur]  # 获取该文件指向的文件if files:  # cur有后续文件for i in range(len(files)):inDegree[files[i]] -= 1  # cur的指向的文件入度-1if inDegree[files[i]] == 0:queue.append(files[i])if len(result) == n:print(" ".join([str(i) for i in result]))else:print(-1)

47. 参加科学大会(dijkstra算法)

最短路是图论中的经典问题即:给出一个有向图,一个起点,一个终点,问起点到终点的最短路径。

dijkstra算法:在有权图(权值非负数)中求从起点到其他节点的最短路径算法。

需要注意两点:

  • dijkstra 算法可以同时求 起点到所有节点的最短路径
  • 权值不能为负数

dijkstra算法和prim算法相似,都是分下面三步,但是变为了源点到节点的距离。

  1. 第一步,选源点到哪个节点近且该节点未被访问过
  2. 第二步,该最近节点被标记访问过
  3. 第三步,更新非访问节点到源点的距离(即更新minDist数组)
if __name__ == '__main__':n, m = map(int, input().strip().split())grid = [[float('inf')] * (n + 1) for _ in range(n + 1)]for i in range(m):p1, p2, val = map(int, input().strip().split())grid[p1][p2] = valstart = 1end = n# 存储从源点到每个节点的最短距离minDist = [float('inf')] * (n + 1)# 记录顶点是否被访问过visited = [False] * (n + 1)minDist[start] = 0  # 起始点到自身的距离为0for i in range(1, n + 1):  # 遍历所有节点minVal = float('inf')cur = 1# 1、选距离源点最近且未访问过的节点for v in range(1, n + 1):if not visited[v] and minDist[v] < minVal:minVal = minDist[v]cur = vvisited[cur] = True  # 2、标记该节点已被访问# 3、第三步,更新非访问节点到源点的距离(即更新minDist数组)for v in range(1, n + 1):if not visited[v] and grid[cur][v] != float('inf') and minDist[cur] + grid[cur][v] < minDist[v]:minDist[v] = minDist[cur] + grid[cur][v]if minDist[end] == float('inf'):print(-1)  # 不能到达终点else:print(minDist[end])  # 到达终点最短路径

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

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

相关文章

C#发票识别接口,再长的税号录入都不怕

“十二金”工程是我国政府在信息化建设中的重要一步&#xff0c;“金税工程”总称为中国税收管理信息系统&#xff08;CTAIS&#xff09;&#xff0c;是我国电子政务的核心系统之一,是财政的重要环节。十二金”是面向政府办公业务建立的十二个重点信息应用系统&#xff0c;按“…

解决使用monaco-editor编译器,编译器展示内容没有超过编译器高度,但是出现滚动条问题

前言&#xff1a; 最近在完成项目时&#xff0c;有使用编译器进行在线编辑的功能&#xff0c;就选用了monaco-editor编译器&#xff0c;但是实现功能之后&#xff0c;发现即使在编译器展示的内容没有超过编译器高度的情况下&#xff0c;编译器依旧存在滚动条&#xff0c;会展示…

计算机网络--网络层

一、网络层的服务和功能 网络层主要为应用层提供端对端的数据传输服务 网络层接受运输层的报文段&#xff0c;添加自己的首部&#xff0c;形成网络层分组。分组是网络层的传输单元。网络层分组在各个站点的网络层之间传输&#xff0c;最终到达接收方的网络层。接收方网络层将运…

如何在 Java 应用中使用 Jedis 客户端库来实现 Redis 缓存的基本操作

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

构建高效盲盒小程序:数据库设计、安全策略与性能优化

在移动互联网时代&#xff0c;盲盒经济以其独特的魅力迅速崛起&#xff0c;成为连接消费者与商品的新桥梁。盲盒小程序作为这一趋势的载体&#xff0c;不仅要求用户体验流畅&#xff0c;还需确保数据安全与性能卓越。本文将从数据库设计、安全策略及性能优化三个方面&#xff0…

堆与栈的概念(RTOS)

目录 #堆在RTOS的概念 #相关代码表示 #堆相关特点 #栈在RTOS中的概念 #栈的代码表示 #栈的相关特点 #为什么每个RTOS任务都要有自己的栈 前言&#xff1a;本篇参考韦东山老师的RTOS&#xff0c;连接放在最后 #堆在RTOS的概念 本文所指的堆与栈并不是数据结构中&#xff…

【unity实战】在Unity中使用有限状态机制作一个敌人AI

最终效果 文章目录 最终效果前言有限状态机的主要作用和意义素材下载逻辑图敌人动画配置优雅的代码文件目录状态机代码定义敌人不同状态切换创建敌人效果更多的敌人参考源码完结 前言 有限状态机以前的我嗤之以鼻&#xff0c;现在的我逐帧分析。其实之前我就了解过有限状态机&…

2.(vue3.x+vite)调用iframe的方法(vue编码)

1、效果预览 2.编写代码 (1)主页面 <template><div><button @click="sendMessage">调用iframe,并发送信息

【udp报文】udp报文未自动分片,报文过长被拦截问题定位

问题现象 某局点出现一个奇怪的现象&#xff0c;客户端给服务端发送消息&#xff0c;服务端仅能收到小部分消息&#xff0c;大部分消息从客户端发出后&#xff0c;服务端都未收到。 问题定位 初步分析 根据现象初步分析&#xff0c;有可能是网络原因导致消息到服务端不可达&a…

【C语言】文件的顺序读写

©作者:末央&#xff06; ©系列:C语言初阶(适合小白入门) ©说明:以凡人之笔墨&#xff0c;书写未来之大梦 目录 前言字符输入输出函数 - fgetc和fputc文本行输入输出函数 - fgets和fputs格式化输入输出函数 - fscanf和fprintf 前言 对文件数据的读写可以分为顺序…

Unity3D 打造基于AStar的寻路与导航详解

在游戏开发中&#xff0c;寻路与导航是一个至关重要的功能&#xff0c;它能够使游戏角色自动找到最优路径&#xff0c;避开障碍物&#xff0c;实现自动导航&#xff0c;从而提升游戏体验。AStar&#xff08;A*&#xff09;算法作为一种广泛应用的寻路算法&#xff0c;因其高效性…

关于多线程的使用方法

多线程在python中应用比较广泛&#xff0c;但是因为python中有GIL锁的缘故&#xff0c;在多线程中看起来是并发的执行的&#xff0c;在宏观上是并发执行的&#xff0c;但是在微观上是一个接着一个执行。 在python中使用多线程比较简单&#xff0c;是一套固定的模版。 from qu…

PHP利用GD库实现图片合成功能方法

在程序项目开发的过程中我们免不了要实现一种功能。例如海报的生成&#xff0c;照片和文字合成一张新的图片。php中怎么实现 实现功能 文字和照片合成一张新的照片&#xff0c;并且自适应换行并加上签名和日期&#xff0c;加上字体样式&#xff0c;下面我们就开实现该功能 实现…

Seal^_^【送书活动第8期】——《ChatGLM3大模型本地化部署、应用开发与微调》

Seal^_^【送书活动第8期】——《ChatGLM3大模型本地化部署、应用开发与微调》 一、参与方式二、本期推荐图书2.1 作者建语2.2 编辑推建2.3 图书简介2.4 前 言2.5 目 录 三、正版购买 大模型领域 既是繁星点点的未知宇宙&#xff0c;也是蕴含无数可能的广阔天地&#xff0c; 正…

深入理解 Linux 内核架构

目录 引言内核概念Linux 内核的基本组成 进程管理内存管理文件系统设备驱动网络栈内核结构 内核态与用户态内核模块系统调用中断与异常处理内核同步机制Linux 内核使用场景常用的内核命令与工具内核调试与性能优化总结 1. 引言 Linux 内核是现代计算机系统的核心组件之一&am…

python--基础知识点--协程

协程由用户态控制&#xff0c;不由内核控制1个线程中可以开很多协程协程切换是在用户态控制不由内核控制&#xff0c;切换时资源开销小使用方式&#xff1a;async def、await可等待对象(协程对象、Future对象、task对象(是Future对象的子类)->io等待)、事件循环使用场景&…

idea创建自定义的maven spark scala archetype脚手架

一&#xff1a;先创建一个Maven项目net.alchim31.maven&#xff08;选该模板&#xff0c;得要等一会儿才能加载出来&#xff09; 之后将自己的目录结构建立好&#xff0c;最好不要有空目录&#xff0c;可能会因为没有文件在install的时候编译不进去 pom中内容也按照自己的需要改…

Stable Diffusion web UI 插件

2024.7.3更新&#xff0c;持续更新中 如果需要在linux上自己安装sd&#xff0c;参考&#xff1a;stable diffusion linux安装 插件复制到 /stable-diffusion-webui/extensions 目录下&#xff0c;然后重新启动sd即可 一、插件安装方法 每种插件的安装方法可能略有不同&#xf…

苹果p12证书最简单最新申请流程

使用uniapp打包&#xff0c;在ios上打正式包需要苹果的p12证书和证书profile文件&#xff0c;点进去uniapp的ios证书申请教程&#xff0c;通篇就是使用mac电脑申请的教程&#xff0c;假如没有mac电脑就无法继续了。 因此&#xff0c;假如没有mac电脑的同志们&#xff0c;可以参…

高薪程序员必修课-Java中为什么不建议使用Executors来创建线程池?

目录 前言 原因分析 1. newFixedThreadPool 和 newSingleThreadExecutor 示例&#xff1a; 2. newCachedThreadPool 示例&#xff1a; 建议的替代方法 示例&#xff1a; 解释&#xff1a; 总结 前言 在Java中&#xff0c;Executors 类提供了几个工厂方法来创建不同类型…