我的是用的Java来实现的最短路径的弗洛伊德算法,该方法使用的是一个事先得到的邻接矩阵,其实也就是一个存储着距离的二维表(无向图)。我想问下我如何能使其在得到所有两点间最短距离时同时,又能产生我定义好的起点到终点的之间的最短路径所要经过的点?
- Java code
public void path_FLOYD(int data[][]) { int i, j, k; length = data.length; D = new int[length][length];// D存放每对顶点之间的最短路径值 path = new int[length][length];// p存放每对顶点之间的最短路径 for (i = 0; i < length; i++) {// 各节点之间的初始已知路径及距离 for (j = 0; j < length; j++) { D[i][j] = data[i][j];// path[i][j]= -1; } }// for for (k = 0; k < length; k++) { for (i = 0; i < length; i++) { for (j = 0; j < length; j++) { if (i == j)// 对角线上的元素(即顶点自身之间)不予考虑 continue; if (D[i][k] + D[k][j] < D[i][j]) {// 从i经k到j的一条路径更短 D[i][j] = D[i][k] + D[k][j]; path[i][j]=k; //System.out.print(" "+path[i][j]); } } } }}
------解决方案--------------------
弗洛伊德算法
--
俺还真不懂……囧
------解决方案--------------------
你既然已经可以通过递归得到两个点的最短距离,重新在递归中设置一个参数(集合、字符串都行)。
每次距离增加的时候把当前点的值存进去就好了吧