1

私は数独ソルバーをコーディングしようとしています。そのために試みた方法は、ソリューションまたは有効な可能な値のいずれかを持つ「セット」オブジェクトのアドレスを保持するポインターの9x9グリッドを作成することでした。

最初に各列を通過し、次に次の行に移動して繰り返すという、2つのforループを持つ配列を通過することができました。

ただし、特定のセルが属するサブグリッド(またはボックス、ブロックなど)をどのように指定するかを想像するのに苦労しています。私の最初の印象は、forループにifステートメントがあることでした。たとえば、row <2(行は0から始まる)&col <2の場合、最初のブロックにいますが、それは厄介なようです。これを行うためのより良い方法はありますか?

4

3 に答える 3

9

次のように、行と列からブロック番号を計算できます。

int block = (row/3)*3 + (col/3);

これは、次のようにブロックに番号を付けます。

+---+---+---+
| 0 | 1 | 2 |
+---+---+---+
| 3 | 4 | 5 |
+---+---+---+
| 6 | 7 | 8 |
+---+---+---+
于 2011-01-17T21:46:33.453 に答える
1

81個​​のエントリを持つルックアップテーブルを作成します。各エントリは9x9グリッドのセルを参照し、必要な情報(どのボックス、どの列、どの行など)を提供します。

于 2011-01-17T21:47:57.443 に答える
0

私はこれを自分で使用します(ただし、Pythonでは、xとyが0から9まで排他的であると想定しています):

int bx, by;
for (bx = (x/3)*3; bx < (x/3)*3 + 3; bx++) {
    for (by = (y/3)*3; by < (y/3)*3 + 3; by++) {
        // bx and by will now loop over each number in the block which also contains x, y
    }
}
于 2011-01-17T21:50:18.893 に答える