How to get shortest path with Adjacency Matrix?

    上一篇谈到了求最短路和最短路距离matrix的问题。这里简要记录下如何根据adjacency matrix 和Distance Matrix 求最短路径中每一个节点。   

for (int i = 0; i < n; ++i) {
            next[i][i] = i;
            for (int j = 0; j < n; ++j) {
                if (i != j) {
                    next[i][j] = -1;
                    for (int k : adjList[i]) {
                        if (distMatrix[i][j] == distMatrix[k][j] + 1)
                            next[i][j] = k;
                    }
                }
            }
        }
Floyd-Warshall algorithm(另一种基于Dynamic Programming的最短路算法)算法,由于其本身结构的特点,可以单纯利用distance matrix来记录每一个节点。下面是Floyd-Warshall algorithm的java实现。

        for (int i=0; i<n; ++i) {
            for (int j=0; j<n; ++j) {
                if (i==j) {
                    shortest[i][i] = 0;
                    next[i][i] = i;
                } else if (adjMatrix[i][j]==1) {
                    shortest[i][j] = 1;
                    next[i][j] = j;
                } else {
                    next[i][j] = -1;
                    shortest[i][j] = Integer.MAX_VALUE/2;
                }
            }
        }
      

    for (int k = 0; k<n; ++k) {
            for (int i=0; i<n; ++i) {
                for (int j=0; j<n; ++j) {
                    int withoutK = shortest[i][j];
                    int withK = shortest[i][k] + shortest[k][j];
                    if (withK < withoutK) {
                        shortest[i][j] = withK;
                        next[i][j] = next[i][k];
                    }
                }
            }
        }

你可能感兴趣的:(Matrix)