我的输入矩阵如下:
0 1 1 0
0 0 1 0
1 0 0 1
0 0 0 0
我针对 Warshall 算法的代码如下:
int V = A.length;
for(int k = 0; k < V; k++) {
for(int i = 0; i < V; i++) {
for(int j = 0; j < V; j++) {
A[i][j] = A[i][j] == 1 || A[i][k] == 1 && A[k][j] == 1 ? 1 : 0;
}
}
}
矩阵的传递闭包公式为(matrix)^2 + (matrix)。按照此公式计算,我得到了以下答案:
1 1 1 1
1 0 1 1
1 1 1 1
0 0 0 0
使用之前提到的代码片段,我得到了如下答案:
1 1 1 1
1 1 1 1
1 1 1 1
0 0 0 0
所以,我的问题是,哪个答案是正确的,算法是否按照正确的方式工作?
A[i][j] ||= A[i][k] && A[k][j];
- Damien