如何检查 6x6 数独中的 3x2 矩形框;
How to check a 3x2 rectangle box in a sudoku 6x6;
(已解决)
我正在尝试在 java grapichs 中制作 6x6 数独,但我在检查 3x2 框时遇到了一些问题,我尝试了一些但它仅适用于 9x9 数独。
如果 3x3 框中已经有输入中的数字,则此方法会检查 9x9 数独网格。如果没有,它将 return 为真,否则为假。
数独规则:
- 每行没有重复的数字
- 每列没有重复的数字
- 每个框中没有重复的数字
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
基本上,该方法使用模运算符来计算行数和列数。然后它将 "solution" 数组中的所有元素与给定数字进行比较。
可以使用该方法来确定所有数字是否不同(通过 运行 该方法再次对所有数字进行循环)。这是非常低效的。
改为:创建地图。作为键,使用所有可能的数字(例如 1 到 9 的小数独)。该值为布尔值和 false。然后迭代解决方案一次。对于您在解决方案中找到的每个数字,检查相应的地图值是否为假。如果是这样,请将其更改为 true。如果您找到一个已经为真的值,您就知道这个数字在您的解决方案中至少出现了两次。
注意:我的回答中没有提到数独网格的大小。因此,只需根据 6 X 6 所需的 "sizes" 和数字进行调整即可。
(已解决) 我正在尝试在 java grapichs 中制作 6x6 数独,但我在检查 3x2 框时遇到了一些问题,我尝试了一些但它仅适用于 9x9 数独。 如果 3x3 框中已经有输入中的数字,则此方法会检查 9x9 数独网格。如果没有,它将 return 为真,否则为假。
数独规则:
- 每行没有重复的数字
- 每列没有重复的数字
- 每个框中没有重复的数字
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
基本上,该方法使用模运算符来计算行数和列数。然后它将 "solution" 数组中的所有元素与给定数字进行比较。
可以使用该方法来确定所有数字是否不同(通过 运行 该方法再次对所有数字进行循环)。这是非常低效的。
改为:创建地图。作为键,使用所有可能的数字(例如 1 到 9 的小数独)。该值为布尔值和 false。然后迭代解决方案一次。对于您在解决方案中找到的每个数字,检查相应的地图值是否为假。如果是这样,请将其更改为 true。如果您找到一个已经为真的值,您就知道这个数字在您的解决方案中至少出现了两次。
注意:我的回答中没有提到数独网格的大小。因此,只需根据 6 X 6 所需的 "sizes" 和数字进行调整即可。