Dijstra算法
迪杰斯特拉算法思想:按路径长度递增的方法产生从源点到各顶点的最短路径。
解释:有n个顶点,从源点v0出发到其他n-1个顶点有n-1条最短路径,这些路径的求解是按照长度递增的次序进行求解的。
第一条最短路径的求解:以v0为源点,从v0出发找最短的弧,此弧一定是按上面的方法找到的第一条路径。
次最短路径的求解:要么该路径只包含从源点到终点的一条弧,要么是经过第一条最短路径后到达终点的路径。
构造两个顶点集合M和U。M为所有顶点的集合,U存放当前已经求得最短路径的顶点,M-U为剩下的顶点集合。
设辅助向量final[0…n-1], final[i]为TRUE时表示从v0到vi的最短路径已经求出,为FALSE表示尚未求出;
设辅助向量P[0…n-1]和D[0…n-1];D[i]记录目前已知的从v0到vi的最短路径的长度;P[i]记录目前已知的从v0到vi的最短路径;