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;

有人可以解释为什么我们除以三并乘以三吗?

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

2 回答 2

1

因为我们想要 3 的倍数。我们想要小于 pos.getX() 的 3 的最大倍数。它对应于当前 3x3 正方形中的左上角单元格。

请记住 X/3 必须是整数,因此 (X/3)*3 可能不等于 X。

于 2012-05-22T09:52:28.473 回答
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 回答