0

任意の整数 N によって動的に作成される 2D 配列があります。最初に、配列内のすべての値を、数値「-1」を使用する「初期化されていない」ことを表す値に設定する必要があります。ただし、この 2D 配列を 1D 配列に変換し、すべての値を新しい 1D 配列のインデックスと等しくなるように割り当てたいと考えています。

public class Percolation {

private int[][] id;
private int[] array1D;
private int blocked = -1;   //a number that doesn't exist in the array

// create N-by-N grid, with all sites blocked
public Percolation(int N){

    id = new int[N][N];
    for (int k = 0; k < N; k++)
    { for (int i = 0; i < N; i++) id[k][i] = blocked; } 
}


// open site (row i, column j) if it is not already
public void open(int i, int j){


}

open メソッドでは、指定されたインデックスの値を 1D 配列の対応するインデックスに変更する必要があります。例えば:

[-1] [-1]

[-1] [-1]

その後、次のようになります。

[0] [1] [2] [3]

残念ながら、これは宿題なので、インデックスを値として持つ新しい 1D 配列を作成するために、グリッド サイズ "N" を共有する方法がわかりません。

4

3 に答える 3

2

これがあなたの質問に答えるのに役立つかどうかはわかりませんが、次のアルゴリズムは、2 次元マトリックスを表す 1 次元マトリックスにインデックスを付けるためのものです。

colSize*row+col

ここで、colSize は列の最大数です。

たとえば、次のマトリックス:

 [0, 1, 2, 3;
  4, 5, 6, 7;
  8, 9, 10, 11]

そのため、行 1 列 3 にアクセスするには (つまり、インデックス番号である 6 は、次の方法で見つけることができます。

3*1+3 = 6;

したがって、この式を使用して、列と行の数だけで 1D マトリックスを埋めることができるはずです。

于 2012-08-22T05:23:54.017 に答える
1

Nを使用して、クラスのグリッド サイズを取得しますid.length

于 2012-08-22T05:26:24.783 に答える
0

Nがコンストラクターに与えられたパラメーターであることを考えると、そのようなことを行うこともできます。

public class Percolation {
     private int size;
     //...

    public Percolation(int N){
         size = N;
         //...    
    }
}

変数のスコープはすべてクラスです。パブリックに設定すると、p.sizeを使用してアクセスすることもできます。ここで、pはパーコレーションのインスタンスです。

于 2012-09-08T02:56:47.453 に答える