java - 我的 Warshall 算法缺少什么?

标签 java algorithm

我正在尝试实现 Warshall 算法来查找邻接矩阵的传递闭包。这就是我的功能:

public static int[][] warshall(int A[][]){
    int R[][] = A;
    for (int k = 1; k < n; k++) {
        for (int i = 1; i < n; i++) {
            for (int j = 1; j < n; j++) {
                if ((R[i][j] == 1) || ((R[i][k] == 1) && (R[k][j] == 1))) {
                    A[i][j] = 1;
                }
            }
        }
        R = A.clone();
    }
    return A;
}

我正在使用以下邻接矩阵进行测试:

0100
0001
0000
1010

这应该导致:

1111
1111
0000
1111

我离这还差得很远。任何人都可以很容易地看到我缺少的东西吗?

感谢任何提示或建议。

最佳答案

我不熟悉这个特定的算法,但在 Java 和许多其他语言(实际上是大多数语言)中,您应该始终以索引为 0 而不是 1 开始 for 循环。

关于java - 我的 Warshall 算法缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26696452/

相关文章:

java - LWJGL 3.1.6 在 Win 10 上崩溃

java - 在异常处理之前强制执行函数(JAVA)

c - Seg Fault,可能的数组指针问题(Radix Sort Implementation)

python - 如何标准化和标准化字符串数据

javascript - 非负集减法

算法:找到一条直线的峰值

java - Eclipse 和 postgres JDBC 连接

java - 使用 tomcat9 + Memcache 时,HttpSession 对象在 session 之间变为 null

java - Java BigDecimal 与 The Financial Mans - "The 1 cent problem"

python - 从一组 3D 点中采样 N 个点,使最小距离最大化