迪杰斯特拉是单源最短路算法(即只能求一点,到其他任一点的最短路径,但可以加循环得到任意两点间的最短路径),无法处理带负权变的图
算法思路图示
初始化两个集合
S={A}(只包含源点,表示已经确定最短路径的节点,一旦S中包含所有元素那么算法终止)
U={B,C,D,E,F,G}
(1)初始化,所有距离初始化为无穷大
(2)选定点A,更新(A-A距离设为0)
(3)S集合为{A,B},考察B的所有邻接点
为什么选定B加入集合S?
因为不可能还有其他路径比2还短,我不管经过C到B还是D到B都不可能是路径小于2,所以我们得到了A->B的最短路径
做完这一步,下一步加入集合S的是D
因为目前A->D的路径长度最短,为3(我已经知道了A直接到D和A经过B到D的路径长度)
如果A->B->X->D小于min{A->D,A->B->D},那么A->B->X小于min{A->D,A->B->D},那么