-
为什么要每次取最短距离
设已经访问的顶点集是U,未访问的集合是T,则dist[i](i属于T)是 源点 ~> S -> i 的最短路径。
而源点 ~> i的最短路径可能是
-
- 源点 ~> S -> i (=dist[i])
- 也可能是源点 ~> S -> j ~> i(j属于T,j<>i)(=dist[j]+……)。
显然对于每次访问时放入U的顶点i,之后的dist不会更新,即要保证dist[i]是源点到i的最短距离。当dist[i](i属于T)最小时,显然最短路径只可能是前一种情况(因为其它的dist[j]都大于dist[i],故 源点 ~> S -> j ~> i 的长度肯定大于 dist[i])。所以每次取最短距离就能保证每次计算的是最短路。