将9x9 2d阵列划分为9个子网格(如数独)? (C ++)

时间:2011-01-17 21:41:08

标签: c++ multidimensional-array sudoku

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

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

但是,我很难想象如何指定特定单元属于哪个子网格(或框,块等)。我最初的印象是在for循环中有if语句,例如if< 2(行从0开始)& col< 2然后我们在第一个区块,但这似乎变得混乱。会有更好的方法吗?

3 个答案:

答案 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
    }
}