理解这个数独解算器的部分
understanding parts of this Sudoku solver
我对以下代码片段有疑问。这是我在 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;
}
我只是不明白这是怎么回事。 row - row % 3 是做什么的?然后在 for 循环中 i < r + 3 也让我感到困惑。我了解行和列检查器,这些很简单,但是这里的逻辑让我逃避了。
row
和 col
可以是 0 到 8 之间的任何值。它们定义了 9x9 数独游戏中的一个位置。
循环需要检查位置 row,col
所在的特定 3x3 框。
int r = row - row % 3;
在同一个 3x3 框中找到第一行的索引。
int c = col - col % 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
(含)的每个位置,寻找指定的值 number
.
我对以下代码片段有疑问。这是我在 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;
}
我只是不明白这是怎么回事。 row - row % 3 是做什么的?然后在 for 循环中 i < r + 3 也让我感到困惑。我了解行和列检查器,这些很简单,但是这里的逻辑让我逃避了。
row
和 col
可以是 0 到 8 之间的任何值。它们定义了 9x9 数独游戏中的一个位置。
循环需要检查位置 row,col
所在的特定 3x3 框。
int r = row - row % 3;
在同一个 3x3 框中找到第一行的索引。
int c = col - col % 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
(含)的每个位置,寻找指定的值 number
.