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];
}
}
}
}

浙公网安备 33010602011771号