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。如果不是这种情况,你就完了。
假设我有一个二维数组 (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。如果不是这种情况,你就完了。