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

时间:2019-05-04 06:57:49

标签: java sudoku

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

数独规则:

  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

1 个答案:

答案 0 :(得分:1)

基本上,该方法使用模运算符来计算行数和列数。然后,它将“解决方案”数组中的所有元素与给定的数字进行比较。

可以使用该方法确定所有数字是否都不同(通过对所有数字再次在循环中运行该方法)。效率很低。

相反:创建地图。使用所有可能的数字作为键(例如,小数独的数字为1到9)。该值是布尔值,为false。然后重复解决一次。对于在解决方案中找到的每个数字,请检查对应的映射值是否为false。如果是这样,请将其更改为true。如果您发现一个已经为真的值,则说明该数字在您的解决方案中至少出现了两次。

注意:我的答案中没有任何内容涉及Sudoku网格的大小。因此,只需将其调整为6 X 6所需的“大小”和数字即可。