数独,回溯算法

时间:2012-05-22 09:50:53

标签: algorithm sudoku

Sudoku回溯方法

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;

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

除法是整数除法,因此它将删除余数。通过乘法进行整数除法将为您提供正确3x3块的第一个单元格索引。

E.g。

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