Java 我的Warshall算法缺少什么?

Java 我的Warshall算法缺少什么?,java,algorithm,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

我正在尝试实现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;
}
这将导致:

1111
1111
0000
1111
我不会接近这一点的。有人能看出我遗漏了什么吗


感谢您提供的任何提示或建议。

我不熟悉此特定算法,但在Java和许多其他语言(实际上大多数语言)中,您应该始终使用索引为0而不是1来启动for循环。

我没有看到此代码的任何部分遍历顶点或边。还有,什么是
n
?在代码块的任何地方都没有定义。图形可以表示为矩阵,也可以是的音译,其中循环确实从1开始,然后继续到| V |。哇……我简直不敢相信我甚至对这个问题感到困扰。我作为参考使用的书中列出了将每个迭代器初始化为1的算法,而不是简单地检查它,我只是假设它是正确的。对于这个无知的问题,我深表歉意,并感谢你给我的建议,我本应该从一开始就尝试一下。顺便说一句,作为一个建议,删除n,你应该将其作为
static int n=someNum并改用.length或[0].length(因为A是平方矩阵)。一般来说使用globals是不好的做法。。
1111
1111
0000
1111