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

  

posted @ 2022-04-04 22:13  枫浔  阅读(28)  评论(0)    收藏  举报