日期:2014-05-20  浏览次数:21077 次

弗洛伊德算法中如何记录最短路径经过的点
我的是用的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]);
      }
     }
    }
   }
}


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

--

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