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;
答案 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