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

kev*_*vin 1 c++ sudoku multidimensional-array

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

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

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

sth*_*sth 7

您可以从行和列计算块编号,如下所示:

int block = (row/3)*3 + (col/3);
Run Code Online (Sandbox Code Playgroud)

这会对这样的块进行编号:

+---+---+---+
| 0 | 1 | 2 |
+---+---+---+
| 3 | 4 | 5 |
+---+---+---+
| 6 | 7 | 8 |
+---+---+---+
Run Code Online (Sandbox Code Playgroud)