我正在尝试编码一个数独求解器,我尝试这样做的方法是有一个9x9指针网格,其中包含具有解决方案或有效可能值的“set”对象的地址。
我能够通过2个for循环遍历数组,首先遍历每一列,然后转到下一行并重复。
但是,我很难想象如何指定特定单元属于哪个子网格(或框,块等)。我最初的印象是在for循环中有if语句,例如if< 2(行从0开始)& col< 2然后我们在第一个区块,但这似乎变得混乱。会有更好的方法吗?
答案 0 :(得分:7)
您可以从行和列计算块编号,如下所示:
int block = (row/3)*3 + (col/3);
这样对这些块进行编号:
+---+---+---+
| 0 | 1 | 2 |
+---+---+---+
| 3 | 4 | 5 |
+---+---+---+
| 6 | 7 | 8 |
+---+---+---+
答案 1 :(得分:0)
我会创建一个包含81个命令的查找表。每个条目都引用9x9网格中的一个单元格,并为您提供所需的信息(哪个框,哪一列,哪一行......)
答案 2 :(得分: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
}
}