2012-05-22 56 views
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?

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

回答

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 
1

因爲我們想要3的倍數。我們希望3的最大倍數小於pos.getX()。它對應於當前3x3正方形中的左上角單元格。

記住X/3必須是一個整數,從而(X/3)* 3可能不等於X.