1

我正在尝试编写一个数独求解器,我尝试这样做的方法是拥有一个 9x9 的指针网格,这些指针包含具有解决方案或有效可能值的“集合”对象的地址。

我能够通过 2 个 for 循环遍历数组,首先遍历每一列,然后转到下一行并重复。

但是,我很难想象如何指定特定单元格属于哪个子网格(或框、块等)。我最初的印象是在 for 循环中有 if 语句,例如 if row < 2 (rows start at 0) & col < 2 then we're in the 1st block,但这似乎变得混乱。会有更好的方法来做到这一点吗?

4

3 回答 3

9

您可以像这样从行和列计算块号:

int block = (row/3)*3 + (col/3);

这样对块进行编号:

+---+---+---+
| 0 | 1 | 2 |
+---+---+---+
| 3 | 4 | 5 |
+---+---+---+
| 6 | 7 | 8 |
+---+---+---+
于 2011-01-17T21:46:33.453 回答
1

我将创建一个包含 81 个条目的查找表。每个条目都引用 9x9 网格中的一个单元格,并为您提供所需的信息(哪个框、哪一列、哪一行……)

于 2011-01-17T21:47:57.443 回答
0

我自己使用它(但随后在 python 中,假设 x 和 y 从 0 到 9 独占):

int bx, by;
for (bx = (x/3)*3; bx < (x/3)*3 + 3; bx++) {
    for (by = (y/3)*3; by < (y/3)*3 + 3; by++) {
        // bx and by will now loop over each number in the block which also contains x, y
    }
}
于 2011-01-17T21:50:18.893 回答