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

代码随想录算法训练营DAY64|拓扑排序、dijkstra(朴素版)

拓扑排序精讲

from collections import dequedef bfs(degrees):nodes = deque()for j in range(n):if degrees[j]==0:nodes.append(j)result = []        while nodes:idx = nodes.popleft()result.append(str(idx))if depend[idx]:for file in depend[idx]:degrees[file]-=1if degrees[file]==0:nodes.append(file)if len(result)==n:print((' ').join(result))else:print(-1)if __name__=="__main__":n,m = map(int, input().split())degrees = [0]*ndepend = [[] for _ in range(n)]for i in range(m):a,b = map(int, input().split())depend[a].append(b)degrees[b]+=1bfs(degrees)

dijkstra(朴素版)精讲

def dijkstra(graph, n):min_dist = [float('inf')]*nvisited = [False]*nmin_dist[0]=0for i in range(n):min_val = float('inf')cur = -1for j in range(n):if not visited[j] and min_dist[j]<min_val:min_val = min_dist[j]cur = jvisited[cur]=Truefor k in range(n):if not visited[j] and min_dist[cur]+graph[cur][k]<min_dist[k]:min_dist[k]=graph[cur][k]+min_dist[cur]if min_dist[-1] == float('inf'):print(-1)else:print(min_dist[-1])if __name__=='__main__':n,m = map(int, input().split())graph = [[float('inf')]*n for _ in range(n)]for i in range(m):s,e,v = map(int, input().split())graph[s-1][e-1]=vdijkstra(graph, n)  

prim和dijkstra的区别

  • prim是求非访问节点到最小生成树的最小距离,而dijkstra是求非访问节点到源点的最小距离。
  • prim算法可以有负权值,dijkstra算法不可以有负权值
  • prim 更新 minDist数组的写法:
for (int j = 1; j <= v; j++) {if (!isInTree[j] && grid[cur][j] < minDist[j]) {minDist[j] = grid[cur][j];}
}
  • dijkstra 更新 minDist数组的写法:
for (int v = 1; v <= n; v++) {if (!visited[v] && grid[cur][v] != INT_MAX && minDist[cur] + grid[cur][v] < minDist[v]) {minDist[v] = minDist[cur] + grid[cur][v];}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 基因组挖掘指导天然药物分子的发现-文献精读34
  • MongoDB教程(十五):MongoDB原子操作
  • 【系列专题】新质生产力之光,照亮“制造强国”之路
  • 【SpringBoot】URL映射之consumes和produces匹配、params和header匹配
  • go-kratos 学习笔记(1) 安装
  • 【数据结构】树和二叉树
  • InternLM学习笔记
  • 图解RocketMQ之消息模型详解(1)
  • Java程序中常见问题
  • Linux源码阅读笔记14-IO体系结构与访问设备
  • LC61----1374. 生成每种字符都是奇数个的字符串(字符串)---java版
  • C++树(二)【直径,中心】
  • 初识dockerFile之RUN和WORKDIR
  • 在 VM 虚拟机中安装 openEuler + 桌面
  • 【RT摩拳擦掌】RT600 4路音频同步输入1路TDM输出方案
  • @jsonView过滤属性
  • 【知识碎片】第三方登录弹窗效果
  • 0基础学习移动端适配
  • angular组件开发
  • C++类中的特殊成员函数
  • es的写入过程
  • gitlab-ci配置详解(一)
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript异步流程控制的前世今生
  • js学习笔记
  • Lsb图片隐写
  • maya建模与骨骼动画快速实现人工鱼
  • MySQL用户中的%到底包不包括localhost?
  • python大佬养成计划----difflib模块
  • rabbitmq延迟消息示例
  • redis学习笔记(三):列表、集合、有序集合
  • spark本地环境的搭建到运行第一个spark程序
  • swift基础之_对象 实例方法 对象方法。
  • 闭包--闭包作用之保存(一)
  • 删除表内多余的重复数据
  • 深度学习在携程攻略社区的应用
  • 微信公众号开发小记——5.python微信红包
  • 系统认识JavaScript正则表达式
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 在electron中实现跨域请求,无需更改服务器端设置
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • 组复制官方翻译九、Group Replication Technical Details
  • ​MySQL主从复制一致性检测
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • #android不同版本废弃api,新api。
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (阿里云万网)-域名注册购买实名流程
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (第一天)包装对象、作用域、创建对象
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (强烈推荐)移动端音视频从零到上手(下)
  • (三)docker:Dockerfile构建容器运行jar包