package com.xjj.Ah;
/*------只有5行的Floyd最短路径算法---多源最短路---
* 1.i 到 j 的直接路径可以引入其他 k 节点使其更短
* 先通过 1 节点,a[i][j] > a[i][1]+a[1][j],
* 则a[i][j] = a[i][1]+a[1][j]
* 再通过 1,2 节点,a[i][j] > a[i][2]+a[2][j],
* 则a[i][j] = a[i][2]+a[2][j]
* ......
* 也就相当于引入第三方节点......且1,2已经依次改变
*
* 2.代码实现非常简单
* 3.时间复杂度是O(N^3)
* 4.Floyd-Warshall算法不能解决带有“负权回路”(或者叫“负权环”)的图
* 5.求得任意两点的最短路径,这称为“多源最短路”
*
* 6.此为邻接矩阵
* */
public class Floyd {
public static int[][] method(int[][] a,int n){
for(int k = 0; k < n; k++)
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
if(a[i][j] > a[i][k] + a[k][j])
a[i][j] = a[i][k] + a[k][j];
return a;
}
public static void main(String[] args) {
//100代表不通路或无穷大
int[][] a = {{0,2,6,4},{100,0,3,100},{7,100,0,1},{5,100,12,0}};
a = method(a, 4);
for(int i = 0; i < 4; i++){
for(int j = 0; j < 4; j++){
System.out.print(a[i][j] + " ");
}
System.out.println();
}
}
}