2012-05-22 1 views
2

스도쿠 역 추적 방법스도쿠, 우리는 세 가지로 나누어 세 곱 왜 x와 y =</p> <pre><code>private byte x; private byte y; </code></pre> <p>누군가가 설명 할 수 알고리즘

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;   

을 역 추적 해?

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

답변

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 
1

우리는 3의 배수를 원하기 때문에 pos.getX()보다 작은 3의 가장 큰 배수를 원합니다. 현재 3x3 정사각형의 왼쪽 위 셀에 해당합니다.

기억 X/3이어야 그 나머지를 제거 할 수 있도록 그래서 정수 (X/3) * 3 X.

관련 문제