Floyd算法
Floyd算法用于解决全源最短路径问题
Floyd算法基于一个事实:如果存在顶点k使得以k作为中介点时顶点i和j的最短距离缩短,则使用顶点k作为顶点i和j的中介点,即dis[i][k] + dis[k][j] < dis[i][j]时 ,令dis[i][j] = dis[i][k] + dis[k][j]。
所以Floyd算法的基本流程如下
枚举顶点k
以顶点k作为中介点,枚举所有顶点对i,j
如果dis[i][k] + dis[k][j] < dis[i][j]
赋值dis[i][k] + dis[k][j] < dis[i][j]
Floyd算法的思想比较简单,可以直接写出代码
void Floyd(){
for(int k = 0; k < n; K++){
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
if(dis[i][k] != INF && dis[k][j] != INF && dis[i][k] + dis[k][j] < dis[i][j]){
dis[i][k] + dis[k][j] < dis[i][j];
}
}
}
}
}