当前位置: 代码迷 >> J2SE >> 弗洛伊德算法中怎么记录最短路径经过的点
  详细解决方案

弗洛伊德算法中怎么记录最短路径经过的点

热度:94   发布时间:2016-04-24 02:00:24.0
弗洛伊德算法中如何记录最短路径经过的点
我的是用的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]);      }     }    }   }}


------解决方案--------------------
弗洛伊德算法

--

俺还真不懂……囧
------解决方案--------------------
你既然已经可以通过递归得到两个点的最短距离,重新在递归中设置一个参数(集合、字符串都行)。
每次距离增加的时候把当前点的值存进去就好了吧