Dijkstra算法是基于贪心策略的,时间复杂度为O(|V|^2)。
对应代码解释:
1. 初始化:集合S初始为原点{istart},distance[]的初始值为distance[istart] = M[istart][i],i=1,2,...,vertex。
2. 从顶点集合V-S中选出iVerLeft,满足distance[iVerLeft] = Min{distance[istart] | Vi 属于V-S}, iVerLeft 为当前从istart 出发的最短路径的终点,令S = S 并{iVerLeft}。
3. 更新从原点出发到集合V-S上任一顶点j可到达的最短路径长度(!S[j] && M[iVerLeft][j]<INIFINITE),如果distance[j] > distance[iVerLeft]+M[iVerLeft][j],则distance[j] = distance