1.问题描述
给定一个带权有向图G={V,E},以及V中的一个顶点,称为源,计算从源到其他各顶点的最短路径。
2.Dijkstra算法
Dijkstra算法是解单源最短路径的一个贪心算法,其主要思想是:设置顶点集合S,并不断地扩充该集合S,一个点可以归并到该集合的充要条件是该点到源点的距离已知。用数组dist记录目前所有点到该点的最短路径,循环依次找出不在该集合中的(V-S)点到源点路径最短的点加入该集合(注意:数组dist记录的是所有点到源点的最短路径,在该集合(S)中的点到源点的最短路径是可能会经过S中的顶点的最短路径,V-S中的点到源点的目前最短距离是距离从该点到源点的直接路径长短)。每当加入一个新点v1,就对数组dist做必要的修改(比较源点到v1的最短路径加上v1到该点的最短路径和源点不通过v1到该点的最短路径,如果前者更短,则更新数组dist中对应的值为前者的值),依次循环直到所有的点都在集合S中(S=V),则数组d