2

数独バックトラック法

int xx = (pos.getX() / 3) * 3;          
int yy = (pos.getY() / 3) * 3;           
for (int y = 0; y < 3; y++) {              
    for (int x = 0; x < 3; x++) {               
        if ((xx + x != pos.getX()) && (yy + y != pos.getY())) {            
            possible[work[xx + x][yy + y]] = false;           

ここで、x と y =

private byte x;
private byte y;

3 で割って 3 を掛ける理由を誰か説明できますか?

(pos.getY() / 3) * 3;                      
(pos.getX() / 3) * 3;
4

2 に答える 2

1

除算は整数除算なので、剰余を取り除きます。整数除算の後に乗算を行うと、正しい 3x3 ブロックの最初のセル インデックスが得られます。

例えば

pos    0    1    2    3    4    5    6    7    8
/3     0    0    0    1    1    1    2    2    2
*3     0    0    0    3    3    3    6    6    6
于 2012-05-22T10:09:54.923 に答える
1

3 の倍数が必要だからです。pos.getX() よりも小さい最大の 3 の倍数が必要です。現在の 3x3 正方形の左上のセルに対応します。

X/3 は整数でなければならないので、(X/3)*3 は X と等しくない可能性があることに注意してください。

于 2012-05-22T09:52:28.473 に答える