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

相关推荐
0 0 02 小时前
CCF-CSP 32-2 因子化简(prime)【C++】考点:素数因子分解(试除法)
开发语言·数据结构·c++·算法
重生之我是Java开发战士2 小时前
【优选算法】分治:快速排序与归并排序
算法
专注VB编程开发20年2 小时前
早期的redis是进程内的字典列表操作,后面改成TCP网络调用
数据库·redis·算法·缓存
仰泳的熊猫2 小时前
题目1545:蓝桥杯算法提高VIP-现代诗如蚯蚓
数据结构·c++·算法·蓝桥杯
TracyCoder1232 小时前
LeetCode Hot100(57/100)——5. 最长回文子串
算法·leetcode·职场和发展
载数而行5202 小时前
复杂度问题
c语言·数据结构·c++·算法·排序算法
WZ188104638692 小时前
LeetCode第20题
算法·leetcode
像素猎人2 小时前
字符串/字符与整型数据的相互转换stoi/stol()和to_string()
c++·算法
吕司2 小时前
LeetCode Hot Code——三数之和
数据结构·算法·leetcode