4.22

弗洛伊德算法显示各点到各点最短距离和最短路径:

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();
        }
    }
posted @ 2024-04-22 23:14  catsahsy  阅读(3)  评论(0编辑  收藏  举报