Floyd最短路径算法是一种使用动态规划的思想求出图中任意两点之间最短路径的算法。
时间复杂度:
空间复杂度:
其中V是图的顶点数。
算法步骤:
对于图中的每个顶点k,对于每对顶点i和j,计算从i到j经过k的距离,如果比之前计算的i到j之间的距离更短,则更新i到j的最短距离。
这是一个三重循环,遍历完成后即得到了图中每对顶点之间的最短距离。
java代码实现:
public class Floyd {
public static void shortestPath(int[][] graph) {
int n = graph.length;
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (graph[i][k] < Integer.MAX_VALUE && graph[k][j] < Integer.MAX_VALUE)
graph[i][j] = Math.min(graph[i][j], graph[i][k] + graph[k][j]);
}
}
}
}
}