以下为找到一条单源最短路径的思想与思路描述


自己最近看了一下关于单源最短路径的算法,其基础是DijKstra算法从某个起点开始,选择直接连接的最短路径点,更新最短路径长并逐渐扩到终点。


如图所示的路径:(手工画图,若丑勿怪j_0059.gif

wKioL1g6pobT4Ub7AAAXpEsMX0g367.png-wh_50起点为1,寻找到终点3,则操作如下:

一、1找到直接相连的点及其路径长:2(9)、4(6)、5(11),更新点的最短路径数据,此时4(6)路径最短,则以4(6)为起点寻找;

二、4找到5(6+6=12),此时12 > 11不更新,则4(6)点寻找完毕,未结束;

三、此时已找的最短路径点为2(9),则点2可找到点3(9+12=21)并更新,此时2(9)点寻找完毕,21非最短距离,未结束;

四、此时可继续寻找的点为5(11),直接连接的点为3(11+5=16),此时16 < 21则更新点3(21)为3(16),此时点5寻找完毕;

五、此时在可寻找的点里3(16)为最短路径且3为终点(此处只有点3),寻找完毕;


总结:

对每个点存储到该点对应的最短路径,如果有最短的路径则更新(初始每个路径长为无穷大);

  1. 从起点开始寻找可直接连接的点并更新路径;

  2. 如果无直接连接点或无更新点,则改点寻找结束,并找下一个有最短路径点开始;

  3. 如果有最短路径的点则再次寻找并更新路径;

  4. 如果找到终点且该终点路径为可继续寻找路径的点里的最短路径,则该路径为单源最短路径;