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

Java如何检查2d数组中的行是否为空。,java,arrays,algorithm,traversal,minimum-spanning-tree,Java,Arrays,Algorithm,Traversal,Minimum Spanning Tree,假设我有一个2d数组(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 0 0 0 0 0 0 0 0 0 0 0 0 0 0

假设我有一个2d数组(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
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的2d数组中,该数组为空,但大小与G相同。一旦我将值添加到H中,我将G中的值设置为零,并再次遍历数组以找到第二个最小值,然后是第三个,然后是第四个,依此类推。当H中的每一行都有一个值时,我停止遍历数组。对于上面的数组,在我第一次遍历时,我会发现1是最小的值,所以我将它添加到H中,如下所示:

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
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;
}
int numVerts=G.length;
int[][]H=新int[numVerts][numVerts];
而(/*在H*/中存在一个空行){
for(int i=0;i

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

您不想再次遍历H。因此,您必须以某种方式存储H行,在其中输入新值


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

它是空的,但大小与G相同:这是矛盾的。根据定义,空数组的大小为0。H的宽度和高度与G相同,但填充了0,对吗?除非尺寸很大,否则不遍历H是过早的优化。但是您可以只使用一个包含填充了零的行集合的集合。每次向行添加非零数字时,请从集合中删除该行。当集合为空时,您就完成了。如果即使遍历布尔数组也太多,您也可以使用计数器来补充此解决方案。无论何时将布尔数组中的条目从false更改为true,都会增加计数器。当计数器到达
numVerts
时,就完成了。忽略关于它无限循环的最后一条注释。我发现我必须在H中加两次这个值,所以我加起来把布尔数增加2。