0

どこが間違っているのですか?これはうまくいかないようです。セルを見つけるaiとjをパラメーターで指定しようとしています。そして、9x9数独グリッドで可能な値を返します。これは、最初の配列、つまりセルが空の場合はa [0] = trueであり、セルが再生または占有されている場合はfalseです。配列の残りの部分は、そのiセルとjセルに挿入できる値で構成されます。したがって、可能な値は4であり、a [4] = trueを返し、残りのブール配列が可能になります。誰かが私がどこで間違っているのか教えてもらえますか?whileループは正しくありませんか?

   public boolean[] getPossible( int i, int j)
   {

    final int booArraySize = 10;
    boolean[] possibleArray = new boolean[booArraySize];
    int zero = 0;
    if ( game[i][j] == 0)
    {

        for( int b=1; b < possibleArray.length; b++)
        {
            possibleArray[b] = true;
        }

        int row=i;
        int col= 0;

        int[] copyy = new int[GRID_SIZE];
        for( int m = 0; m < copyy.length; m++)
        {
            copyy[m] = 1;
        }

        while ( (copyy[0] < 10) && (copyy[0] >0))
        {
            for ( int q= col+1; q < game.length; q++)
            {
                if( copyy[0] == game[row][q])
                {
                    possibleArray[q] = false;
                }
                else
                {
                    possibleArray[q] = possibleArray[q];
                }
            }
            copyy[0] = copyy[0] + 1;

        }
         possibleArray[0]= true;
    }

    return possibleArray;
}
4

1 に答える 1

1

私が理解しているように、許可された値に対応する位置に設定しよpossibleArrayうとしています。true各インデックス位置を に設定するタイミングを決定するために、ゲーム ボードをスキャンしてテストを行っているようtrueです。ロジックを逆にすることをお勧めします。すべての値を に設定possibleArraytrue、ボードをスキャンして特定の値を除外する値を探します。次の疑似コードのように、(i, j) に関連する各位置のゲーム ボードの値を に設定するインデックスとして使用することで、これを行うことができますpossibleArrayfalse

// initialize possibleArray to true at all positions
for (each board position u,v along row i, column j, and square containing (i,j)) {
    possibleArray[game[u][v]] = false;
}
possibleArray[0] = true; // do this after instead of before

空のゲーム ポジションの場合、これにより possibleArray[0] が false に設定されますが、ループの終了後に修正します。

編集:

これは、行と列を同時に処理する私の試みです。位置 (i,j) を含む 3x3 ボックスは扱いません。それは演習として残します。:)

public boolean[] getPossible( int i, int j)
   {

    boolean[] possibleArray = new boolean[10];
    if (game[i][j] == 0)
    {
        for( int b=1; b < 10; b++)
        {
            possibleArray[b] = true;
        }

        for (int n = 1; n < GRID_SIZE; ++n) {
            possibleArray[game[i][n]] = possibleArray[game[n][j]] = false;
        }
        // TODO Scan the 3x3 square containing cell (i,j)
        possibleArray[0]= true;
    }
    return possibleArray;
}

(コードに基づいて) game[1][1] から game[GRID_SIZE][GRID_SIZE] までがゲーム ボードの正しいインデックス範囲であると想定しています。

于 2011-05-29T02:51:10.507 に答える