这两天因为朋友有点事,一直都很忙,没有更新文章,希望大家谅解。 继前天退出的Dijkstra算法后,在其基础上,我们来进行Floyd代码的分享。 代码程序: package org.tree; public class FloydArithmetic { private static final int INFINITE = 9999; public static int[][] Pathmatirx; public static int[][] shortPathTable ; public static void floydArithmetic(int[][] matrix,int vertexsSize){ // 构建一个用于保存所有点最短路径的下表存储数组 Pathmatirx = new int[vertexsSize][vertexsSize]; // 构建一个用于保存点与点之间的对端路径存储数组 shortPathTable = new int[vertexsSize][vertexsSize]; // 初始化我们定义的两个数组 for (int i = 0; i < vertexsSize; i++) { for (int j = 0; j < vertexsSize; j++) { if(i == j){ shortPathTable[i][j] = 0; }else{ shortPathTable[i][j] = matrix[i][j]; } Pathmatirx[i][j] = j; } } // Floyd算法原理 D[j][k] = min(D[j][k],D[j][i]+d[i][k]) for (int i = 0; i < vertexsSize; i++) { for (int j = 0; j < vertexsSize; j++) { for (int k = 0; k < vertexsSize; k++) { if(shortPathTable[j][k] > shortPathTable[j][i] + shortPathTable[i][k]){ shortPathTable[j][k] = shortPathTable[j][i] + shortPathTable[i][k]; Pathmatirx[j][k] = Pathmatirx[j][i]; } } } } } /** * 打印点与点之间的最短路径 * @param vertex1 * @param vertex2 * @param Pathmatirx */ private static void printShortPath(int vertex1,int vertex2,int[][] Pathmatirx){ System.out.print("路径为: "+vertex1); while (vertex1 != vertex2) { vertex1 = Pathmatirx[vertex1][vertex2]; System.out.print(" ------> "+vertex1); } System.out.println(); } public static void main(String[] args) { int[][] matrix = new int[5][5]; for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix.length; j++) { matrix[i][j] = INFINITE; } } matrix[0][1] = 10 ; matrix[1][0] = 10 ; matrix[1][3] = 13 ; matrix[3][1] = 13 ; matrix[0][4] = 7 ; matrix[4][0] = 7 ; matrix[0][2] = 3 ; matrix[2][0] = 3 ; matrix[3][4] = 5 ; matrix[4][3] = 5; matrix[2][4] = 2 ; matrix[4][2] = 2 ; floydArithmetic(matrix,5); for (int i = 0; i < shortPathTable.length; i++) { for (int j = 0; j < shortPathTable[i].length; j++) { System.out.println("点"+i+"到点"+j+"最短距离 "+shortPathTable[i][j]); printShortPath(i,j,Pathmatirx); } } } } 网上这种算法讲解很多,而且很容易被大家理解,我仅仅在注释上给大家略讲了下。希望各位饭友学习愉快。如有错误,欢迎指教!! 注意:此算法是我在书上看到的,我仅仅只是将原来的C代码翻译成java代码,所以写的原创,请勿乱喷!!!