Java 如何检查二维数组中的一行是否为空。

Java how to check if a row is empty in a 2d array.

假设我有一个二维数组 (G),如下所示:

0  0  0  0  0  12 13 0 
0  0  6  0  0  0  0  3 
0  6  0  4  0  0  0  5
0  0  4  0  10 0  0  7
0  0  0  10 0  11 8  9
12 0  0  0  11 0  1  0 
13 0  0  0  8  1  0  2
0  3  5  7  9  0  2  0

我必须像这样遍历一个数组并找到不为零的最小值。找到最小值后,我将它添加到另一个名为 H 的二维数组中,该数组为空但大小与 G 相同。将值添加到 H 后,我将 G 中的值设置为零并再次遍历数组以找到第二个最小值,然后是第三个,然后是第四个,依此类推。当 H 中的每一行都有一个值时,我停止遍历数组。所以对于上面的数组,在我第一次通过时,我会发现 1 是最低值,所以我将它添加到 H 中,如下所示:

0  0  0  0  0  0  0  0 
0  0  0  0  0  0  0  0 
0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0
0  0  0  0  0  0  0  0
0  0  0  0  0  0  1  0 
0  0  0  0  0  1  0  0
0  0  0  0  0  0  0  0

这是我在 java 中写的:

int numVerts = G.length;
int [][] H = new int[numVerts][numVerts];
while (/*there exists an empty row in H*/){
    for (int i = 0; i < numVerts; i++){
        for (int j = 0; j < numVerts; j++){
            if ((G[i][j] != 0) && (G[i][j] < minWeight)){
                minWeight = G[i][j];
                k = i;
                l = j;
            }
        }
    }
    H[k][l] = minWeight;
    H[l][k] = minWeight;
    G[k][l] = 0;
    G[l][k] = 0;
}

所以我可以用任何我想要的方式解决这个问题,这就是我选择的解决方式。所以我唯一需要弄清楚的是我如何判断 H 中的所有行是否至少有 1 个值,而不是完全遍历 H,因为我已经遍历 G 并在 H 的某些地方添加值。

您不想再次遍历H。因此,您必须以某种方式存储 H 中放置新值的行。

您可以创建一个布尔数组,其大小与 H 中的行数相同。然后每次向 H 添加内容后,您将布尔数组中该行的值设置为 true。然后遍历布尔数组并查看值是否仍然为 false。如果不是这种情况,你就完了。