算法介绍
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是从始点S向外迭代,每次迭代产生当前最短路径,当迭代至终点E时算法结束。
该算法需要设置两个集合,临时标记的节点集合OpenedList和最终标记的节点集合SettledList。OpenedList集合中记录当前访问到的节点(即当前可见节点),SettledList中记录已经求出最短路径的节点。算法基本过程如下:
1、初始化OpenedList集合为与起始节点S直接相临接的节点T1,T2……Tn。SettledList初始化为起始节点S。
2、判断OpenedList集合是否为空,若为空则说明找不到一条从S到E的最短路径,算法退出。否则从OpenedList集合中取出距离S最近的节点SettledNode,并将SettledNode加入SettledList集合,判断SettledNode是否是终点E,如果是则转4,如果不是终点,转3。
3、读取和SettledNode直接相临接的节点T1’,T2’……Tn’,判断Ti’是否在OpenedList集合中,a.若在,则判断S距离Ti’的距离newMinDistance是否小于原有的MinDistance,若是,则更新S到Ti’的最短距离为newMinDistance;b.若不在,将Ti’加入到OpenedList集合中,转2。