介绍
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)
Dijkstra算法详解:贪心策略在图遍历中的应用
本文深入探讨了Dijkstra算法的工作原理,这是一种基于贪心策略的图遍历算法,主要用于寻找图中节点间的最短路径。算法不支持负权重边,因为它可能导致错误的最短路径计算。通过邻接矩阵表示图,Dijkstra算法逐步更新节点的距离,并维护未访问节点的最小距离。伪代码展示了算法的具体实现步骤,包括初始化、最小距离节点选择和路径更新,直至所有节点都被访问过。
17万+

被折叠的 条评论
为什么被折叠?



