图论——最短路Dijkstra算法

Dijkstra算法:给定一个源点,求解从源点到每个点的最短路径长度。单源最短路径算法。

适用范围:有向图边的权值没有负数

普通堆实现的Dijkstra算法最普遍、最常用:

a.节点弹出过就忽略

b.节点没弹出过,让其它没弹出 节点距离变小的记录加入堆
普通堆实现的Dijkstra算法,时间复杂度o(m*1ogm),m为边数

1,distance[i]表示从源点到i点的最短距离,visited[i]表示i节点是否从小根堆弹出过

2,准备好小根堆,小根堆存放记录:(x点,源点到x的距离),小根堆根据距离组织

3,令distance[源点]=0,(源点,0)进入小根堆

4,从小根堆弹出(u点,源点到u的距离)

a.如果visited[u]=true,不做任何处理,重复步骤4

b.如果visited[u]=false,令visited[u]=true,u就算弹出过了

然后考察u的每一条边,假设某边去往v,边权为w

  1. 如果visited[v]== false并且distance[u]+ w <distance[v]

令distance[v]= distance[u] + w,把(v,distance[u]+ w)加入小根堆

2)处理完u的每一条边之后,重复步骤4

5,小根堆为空过程结束,distance表记录了源点到每个节点的最短距离。

相关推荐
客卿1231 分钟前
岛屿问题--bfs的应用--二维网络题目学习
学习·算法·宽度优先
无限进步_2 分钟前
【C++】只出现一次的数字 III:位运算的巧妙应用
数据结构·c++·git·算法·leetcode·github·visual studio
2401_900151545 分钟前
代码覆盖率工具实战
开发语言·c++·算法
进击的小头7 分钟前
第8篇:PI控制器设计实战演练
c语言·python·mcu·算法
乌萨奇也要立志学C++8 分钟前
【洛谷】图论 图论最短路算法全解:从单源 Dijkstra 到多源 Floyd 模板与实战
算法·图论
AI科技星14 分钟前
基于v=c空间本底光速螺旋运动的宏观力方向第一性原理推导:太阳系与地球系统的全维度观测验证
人工智能·线性代数·算法·机器学习·平面
Epiphany.55615 分钟前
炸雷!(地址映射+dfs搜索)
算法
Crazyong18 分钟前
FreeRTOS-互斥量-2
算法
啊我不会诶26 分钟前
2025 北京市大学生程序设计竞赛暨“小米杯”全国邀请赛
c++·学习·算法
mit6.82428 分钟前
懒更新|单点查询
算法