图---Floyd

前面介绍过Dijstra算法,该算法主要用于求单源最短路径。

对于求任意两点间的最短路径,这里介绍一种新的算法 Floyd。

算法比较简单:

Floyd
for ( int k = 0; k < 节点个数; ++k ){
    for ( int i = 0; i < 节点个数; ++i ){
        for ( int j = 0; j < 节点个数; ++j ){
            if ( Dis[i][k] + Dis[k][j] < Dis[i][j] ){
            // 找到更短路径
            Dis[i][j] = Dis[i][k] + Dis[k][j];
}}}}

 


大家注意循环的层次,最外层循环式k,不是i

如果k放在最内层就会使得Dis[i][j]的大小被过早的定下来了,后面遇到更小的将无法刷新。

 

posted @ 2015-12-26 21:38  xfei.zhang  阅读(121)  评论(0编辑  收藏  举报