迪克斯特拉算法的正确性
对于第k+1次迭代,s为起点,v是不属于S集合的某一点,x是不属于S集合的任意一点不包括v,y是属于S集合的任意一点
w(s,v)是通过S集合中某些顶点到v的最短路径,w(s,x)是通过S集合中某些顶点到x的最短路径
若有w(s,v)<=w(s,x),无论w(x,v)为何值均有w(s,v)<=w(s,x)+w(x,v), 除非w(x,v)为负数才可能使w(s,v)>w(s,x)+w(x,v),这也是迪克斯特拉算法为什么不适用于权值为负的原因。
S集合加入v点之后,s到v的最短路径即w(s,v)不会因为x点加入S集合而随之变短。
w(s,v)即是s到v的最短路径记为s(s,v),将v加入S集合中,并更新与v相连不在S集合中的路径值,每次加入新顶点到S集合,都会更新顶点到周边顶点(非S集合)的最短路径值,取其小者