Dijkstra深入思考(待续)

  • 为什么要每次取最短距离

设已经访问的顶点集是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])。所以每次取最短距离就能保证每次计算的是最短路。

原文地址:https://www.cnblogs.com/htfy/p/2987629.html