弗洛伊德算法:计算各个顶点之间的最短距离
如果要计算ij之间的最短路径,i可以直接到j,也可以经过任意一个顶点到j,所以dis[i][j] = min{dis[i][j], dis[i][k] + dis[k][j]},而dis[i][k]也可以是i经过其他节点再到k产生的最短路径,dis[k][j]同样
public class Floyd {
public static void main(String[] args) {
int[][] weight = new int[][]{
{0, 5, 7, 65535, 65535, 65535, 2},
{5, 0, 65535, 9, 65535, 65535, 3},
{7, 65535, 0, 65535, 8, 65535, 65535},
{65535, 9, 65535, 0, 65535, 4, 65535},
{65535, 65535, 8, 65535, 0, 5, 4},
{65535, 65535, 65535, 4, 5, 0, 6},
{2, 3, 65535, 65535, 4, 6, 0}};
int len = weight.length;
for(int k = 0; k < len; k++){
for (int i = 0; i < len; i++){
for (int j = i + 1; j < len; j++){
int d = weight[i][k] + weight[k][j];
if (d < weight[i][j]){
weight[i][j] = d;
weight[j][i] = d;
}
}
}
}
for (int[] arr : weight){
System.out.println(Arrays.toString(arr));
}
}
}