gpt4 book ai didi

java - 了解数独解算器的各个部分

转载 作者:行者123 更新时间:2023-12-02 08:59:00 25 4
gpt4 key购买 nike

我对以下代码片段有疑问。这是我在 youtube 上找到的数独解算器。它采用递归回溯算法来求解。我只是想从中学习,但我在某些方面陷入困境。以下代码片段是一个 boolean 值,用于检查数字是否在 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 也让我困惑。我了解行和列检查器,这些很简单,但这里的逻辑让我无法理解。

最佳答案

rowcol 可以是 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,cr+2,c+2(含)的每个位置,查找指定的值 number.

关于java - 了解数独解算器的各个部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60311879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com