1

我有一个二维数组 int matrix[numNodes][numArcs]。这是一个发生矩阵。

现在,如果我们想添加一个弧,我们必须检查这些节点是否存在并且弧不存在。这部分效果很好。我需要做的以下事情是找到一个空列来添加弧。所以矩阵一开始就全是零。所以它很简单,你搜索每一列,直到你找到一列全是零。听起来很简单,但它现在可以工作了。这部分代码如下:

    outerloop:
    for (int i = 0; i < numArcs; i++){
        for (int j = 0; j < numNodes; j++){
            if (matriz[j][i] != 0)
                break;
                //It finds a number != 0 so it should move to the next column 

            //If it gets here, the whole column was full of zeros
            column = i; 
            key = true;
            break outerloop;
        }
    }

我使用密钥知道我找到了该列,因为如果我没有找到它,因为矩阵已满,我需要复制它。那是与此问题无关的另一个问题。

现在,我试图找出问题所在,我注意到以下几点:它只检查这些位置:

01
02
03
03

正如您所看到的,它只是检查每列的第一个位置,而不是一路向下。对我来说这毫无意义。在我的示例中,NumNode 是 10,所以它应该一直向下。

编辑:我的确切示例矩阵是这样的:

 -1  -1 -1 0 0 0 ....
  0   1  0 0 0 ...
  0   0  1 0 0 .....

因此,当它到达第四列时,它会读取零并返回空列。我添加的下一个 n 弧也是如此。我添加的以下弧不再触及第一行。谢谢您的帮助

4

1 回答 1

1
for (int i = 0; i < numArcs; i++){
    for (int j = 0; j < numNodes; j++){
        if (matriz[j][i] != 0)
            break;
            //It finds a number != 0 so it should move to the next column 

        //If it gets here, the whole column was full of zeros
        column = i; 
        key = true;
        break outerloop;
    }
}

如果在内部循环中,您第一次没有中断怎么办..您将存储i到列中而不检查该列的其他行..

您可以更好地使用布尔标志变量来检查您想要的内容。

    int[][] matrix = new int[5][4];
    boolean columnEmpty = true;
    int column = 0;
    boolean key = false;

    matrix[0][0] = -1;
    matrix[0][1] = -1;
    matrix[1][1] = 1;
    matrix[1][2] = -1;
    matrix[2][2] = -1;

    outerloop: for (int i = 0; i < 5; i++){
            columnEmpty = true;
            for (int j = 0; j < 4; j++){
                if (matrix[j][i] != 0) {
                   columnEmpty = false;
                   break;
                }

            }
            if (columnEmpty) {
                // If we are here.. then flag was never set to `true`. 
                // So, all the rows for that column was Zero..
                column = i; 
                key = true;
                break outerloop;
            }

        }

    System.out.println("Column : " + column);
于 2012-10-07T17:18:09.517 回答