Floyd算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法。
图演示:
代码实现:
public void floyd() {
int[] vertex = graph.getVertex();
int[][] edges = graph.getEdges();
for (int i = 0; i < vertex.length; i++) {
for (int j = 0; j < vertex.length; j++) {
// k 为 中间节点,查看
for (int k = 0; k < vertex.length; k++) {
if (edges[i][k] != Integer.MAX_VALUE && edges[k][j] != Integer.MAX_VALUE) {
// 松弛操作,如果 A,B 的距离 > AC + CA的距离,更新AB最短距离为 AC + CA
if (edges[i][j] > edges[i][k] + edges[k][j]) {
edges[i][j] = edges[i][k] + edges[k][j];
}
}
}
}
}
}