package org.floyd;
import java.util.Arrays;
/**
* 弗洛伊德算法
* @author cjj_1
* @date 2020-09-11 14:20
*/
public class FloydDemo {
public static void main(String[] args) {
char[] chars={'A','B','C','D','E','F','G'};
final int N = 65535;
int[][] matrix = {
{N,5,7,N,N,N,2},
{5,N,N,9,N,N,3},
{7,N,N,N,8,N,N},
{N,9,N,N,N,4,N},
{N,N,8,N,N,5,4},
{N,N,N,4,5,N,6},
{2,3,N,N,4,6,N}
};
Graph graph = new Graph(chars,matrix);
graph.floyd();
graph.show();
}
}
class Graph{
char[] chars;
int[][] dis;//最短距离节点
int[][] pre;//前驱节点
public Graph(char[] chars,int[][] dis){
this.chars = chars;
this.dis =dis;
pre = new int[chars.length][chars.length];
for (int i =0;i<dis.length;i++){
dis[i][i] =0;
}
for (int i =0;i<pre.length;i++){
for (int j=0;j<pre[i].length;j++){
pre[i][j] = chars[i];
}
}
}
/**
* 弗洛伊德算法
*/
public void floyd(){
for (int k=0;k<chars.length;k++){
for (int i = 0;i<dis.length;i++){
for (int j =0;j<dis[i].length;j++){
if(dis[i][j]>(dis[i][k]+dis[k][j])){
dis[i][j] = (dis[i][k]+dis[k][j]);
pre[i][j]=k;
}
}
}
}
}
public void show(){
for (int i =0;i<dis.length;i++){
System.out.println(Arrays.toString(dis[i]));
}
System.out.println("=================================");
for (int i =0;i<pre.length;i++){
System.out.println(Arrays.toString(pre[i]));
}
}
}
06-06