(已解决) 我正在尝试用Java grapichs制作6x6数独,但是我在检查3x2框时遇到了一些问题,我尝试了一些操作,但仅适用于9x9数独。 如果在3x3框中的sudoku网格9x9中已经输入了数字,则此方法将检查它。如果没有,它将返回true,否则返回false。
private boolean isInBox(int row, int col, int number) {
int r = row - row % 3; //check the row a group of three
int c = col - col % 3; //Check the column a group of three
//cycle the boxes
for (int i = r; i < r + 3; i++){
for (int j = c; j < c + 3; j++){
if (solution_grid[i][j] == number){
return false; // if the number exist in the box it will exit with a negative response
}
}
}
return true; //if everything goes right it will give a positive response
}
带有框的6x6数独示例
0 0 0|0 0 0
0 0 0|0 0 0
-------------
0 0 0|0 0 0
0 0 0|0 0 0
-------------
0 0 0|0 0 0
0 0 0|0 0 0
答案 0 :(得分:1)
基本上,该方法使用模运算符来计算行数和列数。然后,它将“解决方案”数组中的所有元素与给定的数字进行比较。
可以使用该方法确定所有数字是否都不同(通过对所有数字再次在循环中运行该方法)。效率很低。
相反:创建地图。使用所有可能的数字作为键(例如,小数独的数字为1到9)。该值是布尔值,为false。然后重复解决一次。对于在解决方案中找到的每个数字,请检查对应的映射值是否为false。如果是这样,请将其更改为true。如果您发现一个已经为真的值,则说明该数字在您的解决方案中至少出现了两次。
注意:我的答案中没有任何内容涉及Sudoku网格的大小。因此,只需将其调整为6 X 6所需的“大小”和数字即可。