介绍
Dijkstra算法是一种贪心思想的算法,每一次它都会选取到顶点v的当前最短的路径并基于顶点v的边继续计算,直到遍历完所有的顶点。Dijkstra算法不支持权重为负的边,因为贪心算法一定会选中负权重的边从而可能错过最优解。
图解
伪代码
# map[][]是邻接矩阵
# 初始化
for vertex in vertices:
vertex['distance'] = INFINITY
vertex['prev'] = None
vertices[0]['distance'] = 0
visited = []
# 开始遍历
while len(visited) != len(vertices):
minindex = select_smallest_distance(vertices)
for j in range(len(vertices)):
if j not in visited and vertices[j]['distance'] > vertices[minindex]['distance'] + map[minindex][j]:
vertices[j]['prev'] = minindex
vertices[j]['distance'] = vertices[minindex]['distance'] + map[minindex][j]
visited.append(j)