Dijkstra 算法[python]
Dijstra作为一种经典的单源最短路算法,得到了广泛应用。
算法思想如下:
说明:
S为最短路顶点集合
U为尚未加入S的顶点集合
c i j c_{ij} cij表示点i和点j之间的距离
w i j w_{ij} wij表示点i和点j之间的权重
-
初始时S只包含源点v,v到自己的距离为0.
-
从U中选择顶点temp,使得v->temp的距离最短,然后把temp加入S。
-
以temp为中间点,调整v到U中所有顶点的最短路径,分为两种情况
-
(1)经过temp,则路径长度为 c v , t e m p c_{v,temp} cv,temp+ w t e m p , j w_{temp,j} wtemp,j
-
(2)不经过temp,则路径长度仍为 c t e m p , j c_{temp,j} ctemp,j
则距离为MIN{ c v , t e m p c_{v,temp} cv,temp+ w t e m p , j w_{temp,j} wtemp,j, c t e m p , j c_{temp,j} ctemp,j}
def dijkstra(g,v):
INF = 1000
dist = [INF for i in range(len(g))] #源点到其他顶点的距离
vis = [False for i in range(len(g))] #是否已经纳入顶点集合
path = [v for i in range(len(g))] #路径
dist[v] = 0
path[v] = 0
while True:
u = -1
min<