2022.4.1學習日記
阿新 • • 發佈:2022-04-04
弗洛伊德演算法顯示各點到各點最短距離和最短路徑:
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(); } }