1. 程式人生 > 其它 >2022.4.1學習日記

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();
		}
    }