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 u0∈S,记 S ‾ \overline{S} S 为 V − S V-S V−S。若 p a t h = u 0 ⋯ u v ‾ path=u_0\cdots \overline{uv} path=u0⋯uv,这里 u ‾ ∈ S \overline{u} \in S u∈S 则 ( 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