2022.4.1学习日记
弗洛伊德算法显示各点到各点最短距离和最短路径:
static int top=Integer.MAX_VALUE; public static void floyd(int[][] G){ int size=G.length; int D[][]=new int[G.length][G.length]; int Path[][]=new int[G.length][G.length]; // for(int i=0;i< size;i++){ // for(int j=0;j< size;j++){ // Path[i][j]=-1; // D[i][j]=G[i][j]; // } // } for(int i=0;i<G.length;i++) { for(int j=0;j<G.length;j++) { D[i][j]=G[i][j]; if(D[i][j]<top&&i!=j) { Path[i][j]=i; } else { Path[i][j]=-1; } } } for(int k=0;k< size;k++){ for(int i=0;i< size;i++){ for(int j=0;j< size;j++){ if(D[i][k]!=top&&D[k][j]!=top&&D[i][k]+D[k][j]< D[i][j]){ // 更新i和j两点间的距离 D[i][j]=D[i][k]+D[k][j]; // 更新i和j两点间的路由信息 Path[i][j]=Path[k][j]; } } } } for(int i=0;i<G.length;i++) { for(int j=0;j<G.length;j++) { System.out.print(D[i][j]+" "); } System.out.println(); } System.out.println(); for(int i=0;i<G.length;i++) { for(int j=0;j<G.length;j++) { System.out.print(Path[i][j]+" "); } System.out.println(); } }