Dijkstra算法的原理:
从某个源点到其余各顶点的最短路径,即单源点最短路径。单源点最短路径是指:给定带权有向图G和源点v,求从v到G中其余各顶点的最短路径。迪杰斯特拉(Dijkstra)提出了按路径长度递增的顺序产生各顶点的最短路径算法。
该算法的基本思想是:
(1)设置两个顶点的集合S和T=V-S,集合S中存放已找到最短路径的顶点,集合T存放当前还未找到最短路径的顶点;
(2)初始状态时,集合S中只包含源点v0;
(3)从集合T中选取到某个顶点vi(要求vi到v0的路径长度最小)加入到S中;
(4)S中每加入一个顶点vi,都要修改顶点v0到T中剩余顶点的最短路径长度值,它们的值为原来值与新值的较小者,新值是vi的最短路径长度加上vi到该顶点的路径长度;
(5)不断重复(3)和(4),直到S包含全部顶点。
算法设计:
1.首先函数里面运用二维数组cost[n][n]实现图的临界矩阵存储,数组dist[n]表示源点到节点n的最短距离,S[n]表示某一节点n是否已经进入集合S,如果进入则将S[i]置为1,否则为0。pre[n]表示当前节点n的前驱节点(用来输出路径)。
2.在开始遍历之前,首先给数组D[n]赋值为源点到该点的距离,这样便能第一次找到源点到相邻节点的最短距离(dist[i]=cost[v][i];