图论——最短路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表记录了源点到每个节点的最短距离。

相关推荐
旖-旎几秒前
分治(交易逆序对的总数)(6)
c++·算法·leetcode·排序算法·归并排序
北顾笙980几秒前
day14-数据结构力扣
数据结构·算法·leetcode
Ln5x9qZC29 分钟前
尾递归与Continuation
算法
一路向北he9 分钟前
esp32库依赖
c语言·c++·算法
老四啊laosi9 分钟前
[双指针] 6. 查找总价为目标值的两个商品
算法·力扣·总价为目标值得两商品
人间寥寥情难诉25 分钟前
LRU算法本地实现
java·算法·spring
moonsea020328 分钟前
2026.4.2
开发语言·c++·算法
cpp_250134 分钟前
P10376 [GESP202403 六级] 游戏
c++·算法·动态规划·题解·洛谷·gesp六级
智者知已应修善业36 分钟前
【51单片机4个IO实现16按键可扩展独立按键64矩阵驱动显示矩阵原值】2023-5-8
c++·经验分享·笔记·算法·51单片机
hui-梦苑36 分钟前
[GROMACS]模拟数据分析前轨迹文件生成-轨迹预处理
人工智能·算法·数据分析