图---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]的大小被过早的定下来了,后面遇到更小的将无法刷新。