《算法导论》Dijkstra算法实现

本文介绍了单源最短路径问题,重点讲解了Dijkstra算法的原理和应用,该算法适用于非负权值边的情况。内容包括算法的步骤,通过设置距离数组和优先队列进行迭代,直至找到所有节点的最短路径。当图中边权值相同时,Dijkstra算法等价于BFS搜索。
摘要由CSDN通过智能技术生成

所谓单源最短路径(Single-Source-Shortest-Path)问题,就是求解从某个节点出发,到其他节点的最短距离。
求解该问题的常用算法有Bellman-Ford和Dijkstra,前者适用于一般情况如负权值边,后者适用于非负权值边。

参考《算法导论》第24章-单源最短路径的方法:
1.设置数组d存储每个节点到源节点的距离,维护一个提取最小d值的优先队列Q,Q初始化时是G的所有节点的集合
2.每次while循环取出Q中d最小节点u,添加到节点集合S,遍历当前节点u的邻居节点v,用所谓的松弛技术(Relax)更新邻居节点v的d取值(会影响下一个Q出列的节点)
3.直到Q队列为空,结束

伪代码:

Dijkstra(G, s)  
S = [ ] 
Q = [G] 
while Q:        
    u = extract_min_queue(Q)        
    S.append(u)     
    for each v in Adjacent[u]:          
        Relax(G, d, u, v)   
return d    

Relax(d, u, v)  
if d[v] > d[u] + G[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值