Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 理解这个数独解算器的部分_Java_Recursion_Solver_Sudoku - Fatal编程技术网

Java 理解这个数独解算器的部分

Java 理解这个数独解算器的部分,java,recursion,solver,sudoku,Java,Recursion,Solver,Sudoku,我对下面的代码片段有一个问题。这是我在youtube上找到的数独解算器。它使用递归回溯算法来解决。我只是想从中吸取教训,但我在某些方面遇到了困难。 下面的代码段是一个布尔值,用于检查3x3框中是否有数字,这将在以后的solve方法中使用 // we check if a possible number is in its 3x3 box private boolean isInBox(int row, int col, int number) { int r = row - row %

我对下面的代码片段有一个问题。这是我在youtube上找到的数独解算器。它使用递归回溯算法来解决。我只是想从中吸取教训,但我在某些方面遇到了困难。 下面的代码段是一个布尔值,用于检查3x3框中是否有数字,这将在以后的solve方法中使用

// we check if a possible number is in its 3x3 box
private boolean isInBox(int row, int col, int number) {
    int r = row - row % 3;
    int c = col - col % 3;

    for (int i = r; i < r + 3; i++)
        for (int j = c; j < c + 3; j++)
            if (board[i][j] == number)
                return true;

    return false;
}
我只是不明白这是怎么回事。第%3行做什么?然后在for循环中,i行和列可以是0到8之间的任何值。它们在9x9数独游戏中定义了一个位置

循环需要选中包含位置行col的特定3x3框

int r=行-行%3;在同一个3x3框中查找第一行的索引

int c=列-列%3;在同一个3x3框中查找第一列的索引

两者都将输入值转换为输出:

0 -> 0
1 -> 0
2 -> 0
3 -> 3
4 -> 3
5 -> 3
6 -> 6
7 -> 6
8 -> 6

然后,循环检查从r、c到r+2、c+2(含)的每个位置,查找指定的值编号。

如果插入args行和列的一些示例输入,前两行做什么?在3x3范围内尝试值1到3,然后在3x3范围外尝试值>3,您注意到了什么?