Python解决最短路径问题—Dijkstra算法+堆优化

本文介绍了Dijkstra算法解决最短路径问题,详细阐述了算法思想和步骤,并结合Python代码展示了如何利用堆优化实现该算法。同时指出Dijkstra算法不适用于存在负权边的图。
摘要由CSDN通过智能技术生成

Python解决最短路径问题—Dijkstra算法+堆优化


宇智波一打七今天学习了一个新算法, 迫不及待和大家分享一下

最短路问题介绍

在一个赋权图中,从一个顶点出发到达另外一个顶点的路的权和最小的路径,称为最短路径。Dijkstra算法是解决这一问题的经典算法,接下来我们介绍如何用python实现这一算法。

Dijkstra算法介绍

Dijkstra算法由Dijkstra在1959年发现,这个算法不仅找到了最短的 ( u 0 , v 0 ) (u_0,v_0) (u0,v0) 路,而且给出了从 u 0 u_0 u0 到其他所有顶点的最短路。

算法思想

假设 S S S V V V 的真子集且有 u 0 ∈ S u_0\in S u0S,记 S ‾ \overline{S} S V − S V-S VS。若 p a t h = u 0 ⋯ u v ‾ path=u_0\cdots \overline{uv} path=u0uv,这里 u ‾ ∈ S \overline{u} \in S uS ( u 0 , u ‾ ) (u_0,\overline{u}) (u0,u) 一定是最短路。所以


d ( u 0 , v ‾ ) = d ( u 0 , u ‾ ) + w ( u v ‾ ) d(u_0,\overline{v})=d(u_0,\overline{u})+w(\overline{uv}) d(u
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值