1

私は 2 次元配列 int マトリックス [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 .....

したがって、4 番目の列に到達すると、そのゼロが読み取られ、空の列が返されます。追加した次の 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 に答える