如何检查 6x6 数独中的 3x2 矩形框;

How to check a 3x2 rectangle box in a sudoku 6x6;

(已解决) 我正在尝试在 java grapichs 中制作 6x6 数独,但我在检查 3x2 框时遇到了一些问题,我尝试了一些但它仅适用于 9x9 数独。 如果 3x3 框中已经有输入中的数字,则此方法会检查 9x9 数独网格。如果没有,它将 return 为真,否则为假。

数独规则:

  1. 每行没有重复的数字
  2. 每列没有重复的数字
  3. 每个框中没有重复的数字

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" 和数字进行调整即可。