一、概述
Floyd算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名。
二、示例
求解下图中任意两点间最短距离
(1)运行结果
(2)Java代码
package softDesign;
import java.util.Arrays;
import java.util.Queue;
import java.util.concurrent.ArrayBlockingQueue;
public class FloydMapDistance {
public static void main(String[] args) {
int M = 99999;
int[][] d = {
{M, M, 100, 30, M, 10},
{M, M, M, M, M, 5},
{M, M, M, M, M, M},
{M, M, 60, M, 20, M},
{M, M, 10, M, M, M},
{M, M, M, M, 50, M}
};
//依次把每个结点作为中转结点,尝试d[i][k]+d[k][j]<d[i][j],满足则替换
for(int k =0;k<6;k++){
for(int i=0;i<6;i++){
if(i==k)continue;
for(int j=0;j<6;j++){
if(j==k)continue;
if(d[i][k]+d[k][j]<d[i][j]){
d[i][j]=d[i][k]+d[k][j];
}
}
}
}
Arrays.stream(d).forEach(System.out::println);
}
}