Java如何检查2d数组中的行是否为空。

时间:2016-10-28 15:51:37

标签: java arrays algorithm traversal minimum-spanning-tree

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

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

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

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;
}

这是我在java中写的:

mapPartitions()

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

1 个答案:

答案 0 :(得分:4)

你不想再次遍历H.所以你必须以某种方式存储你在其中放置新值的H行。

你可以将一个布尔数组设为H中行数的大小。然后在每次向H添加内容之后,在布尔数组中将行的值设置为true。然后迭代遍历布尔数组并查看值是否仍为false。如果不是这样,你就完成了。

相关问题