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

代码随想录算法训练营第五十八天|拓扑排序精讲 、dijkstra(朴素版)精讲

拓扑排序

117. 软件构建

from collections import deque, defaultdictdef topological_sort(n, edges):inDegree = [0] * n # inDegree 记录每个文件的入度umap = defaultdict(list) # 记录文件依赖关系# 构建图和入度表for s, t in edges:inDegree[t] += 1umap[s].append(t)# 初始化队列,加入所有入度为0的节点queue = deque([i for i in range(n) if inDegree[i] == 0])result = []while queue:cur = queue.popleft()  # 当前选中的文件result.append(cur)for file in umap[cur]:  # 获取该文件指向的文件inDegree[file] -= 1  # cur的指向的文件入度-1if inDegree[file] == 0:queue.append(file)if len(result) == n:print(" ".join(map(str, result)))else:print(-1)if __name__ == "__main__":n, m = map(int, input().split())edges = [tuple(map(int, input().split())) for _ in range(m)]topological_sort(n, edges)

dijkstra(朴素版)

def dijkstra(grid, start, end, n):min_dist = [float('inf')] * (n + 1)visited = [False] * (n + 1)parent = [-1] * (n + 1)min_dist[start] = 0for _ in range(1, n):min_val = float('inf')cur = 1for v in range(1, n + 1):if not visited[v] and min_dist[v] < min_val:min_val = min_dist[v]cur = vvisited[cur] = Truefor v in range(1, n + 1):if (not visited[v] andgrid[cur][v] != float('inf') andmin_dist[cur] + grid[cur][v] < min_dist[v]):min_dist[v] = min_dist[cur] + grid[cur][v]parent[v] = cur# 打印最短路径path = [end]while parent[path[-1]] != -1:path.append(parent[path[-1]])path.reverse()for i in range(len(path) - 1):print(f"{path[i]} -> {path[i + 1]}")def main():n, m = map(int, input().split())grid = [[float('inf')] * (n + 1) for _ in range(n + 1)]for _ in range(m):p1, p2, val = map(int, input().split())grid[p1][p2] = valstart = 1end = ndijkstra(grid, start, end, n)if __name__ == "__main__":main()

http://www.lryc.cn/news/420151.html

相关文章:

  • 【ARM】ULINK Pro如何和SWD接口进行连接调试
  • react框架安全设计
  • Kafka生产调优实践。Kafka消息安全性、消息丢失、消息积压、保证消息顺序性
  • DDColor部署安装,在服务器Ubuntu22.04系统——点动科技
  • 使用 SSL/TLS 加密保障 RocketMQ 的安全传输
  • uni-app开发
  • 2024社招面经_存储DB广告架构方向
  • android10 系统定制:增加应用锁功能
  • 数据结构----队列
  • 【python】实现对文件夹中的图像连续重命名方法
  • 【nginx 第一篇章】认识一下 NGINX 服务器
  • 【物联网】(防水篇)哪些电子产品需要通过 IPX7 防水级别测试?
  • 高级java每日一道面试题-2024年8月09日-网络篇-什么是XSS攻击如何避免?
  • Linux时间管理:命令与脚本的完美结合
  • 基于ssm+vue+uniapp的微信外卖小程序
  • lvs(linux virtual server)实例
  • Unity游戏开发
  • 5. MQTT消息类型详解(三)
  • TypeScript JSX
  • java里的序列化反序列化、HttpMessageConverter、Jackson、消息转化器、对象转化器...都是啥?
  • GNU/Linux - memtool使用
  • Qt5.12.8源码交叉编译带openssl版本
  • 串行并行数据转换
  • 推荐一个优秀的 .NET MAUI 组件库
  • 用Manim创建条形图【BarChart】
  • iMES工厂管家:强大的工厂管理系统
  • iOS ------ 事件响应链
  • Go 语言 switch 语句的特点
  • 【递归】什么是递归-C语言为例
  • vue针对低版本浏览器不兼容es6特性解决方案,