用java代码实现弗洛伊德算法,并给出原始矩阵和弗洛伊德算法后的矩阵
时间: 2024-10-14 11:13:04 浏览: 29
代码 有向图关联矩阵和邻接矩阵的相互转换算法代码
5星 · 资源好评率100%
弗洛伊德(Floyd-Warshall)算法是一种用于求解所有节点对之间的最短路径的动态规划方法。在Java中,我们可以使用邻接矩阵来表示图,并通过三层循环更新每一对节点之间的最短距离。以下是使用Java实现的基本步骤:
```java
import java.util.Arrays;
public class FloydWarshall {
public static void main(String[] args) {
int[][] graph = { // 原始矩阵,例如一个5x5的图
{0, 4, 0, 0, 0},
{4, 0, 8, 0, 0},
{0, 8, 0, 7, 0},
{0, 0, 7, 0, 9},
{0, 0, 0, 9, 0}
};
int n = graph.length; // 图的节点数
// 初始化一个与输入矩阵相同的二维数组,用于存储经过一次、两次...直到全部路径计算后的最短路径
int[][] shortestPaths = new int[n][n];
System.arraycopy(graph, 0, shortestPaths, 0, n);
// 使用三重循环计算最短路径
for (int k = 0; k < n; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (shortestPaths[i][j] > shortestPaths[i][k] + shortestPaths[k][j]) {
shortestPaths[i][j] = shortestPaths[i][k] + shortestPaths[k][j]; // 更新路径
}
}
}
}
// 输出弗洛伊德算法后的矩阵,显示了每对节点之间的最短路径
for (int[] row : shortestPaths) {
System.out.println(Arrays.toString(row));
}
阅读全文