6x6 数独游戏,找出你所在的部门

6x6 sudoku puzzle, Finding what sector you're in

我正在做一个数独,我需要检查一个数字在当前扇区是否空闲,我已经检查了数字的行和列,所以剩下的就是扇区。

整个拼图为 6x6,有 3 个(每个扇区 2 行)行扇区和 2 个(每个扇区 3 列)列扇区。

我这样检查行和列:

for (int i = 0; i < 6; i++)
{
    if (Matrica[i][column] == CurrentNumber) return 0;
    if (Matrica[row][i] == CurrentNumber) return 0;
}

因为它是一个 6x6 矩阵,扇区是 2x3(或 3x2 不知道格式)

该扇区中只剩下 2 个数字,我需要从我的行号和列号中找出我应该检查的地方,但是解决方案让我逃脱了,我不知道该怎么做。

解决方案:

对于任何感兴趣的人,我都是这样检查的:

int Tikrinimas(int number, int Matrica[][6], int row, int column)
{
int sectorRow = 2 * (row / 2);
int sectorCol = 3 * (column / 3);
int row1 = (row + 1) % 2;
int col1 = (column + 2) % 3;
int col2 = (column + 4) % 3;

/* Check for the value in the given row and column */
for (int i = 0; i < 6; i++)
{
    if (Matrica[i][column] == number) return 0;
    if (Matrica[row][i] == number) return 0;
}

/* Check the remaining two spaces in this sector */
if (Matrica[row1 + sectorRow][col1 + sectorCol] == number) return 0;
if (Matrica[row1 + sectorRow][col2 + sectorCol] == number) return 0;
return 1;
}

在一个函数中,这将检查当前设置的数字在该位置是否可行

如果您有一个分成多个扇区的网格,您可以找到该扇区的一个角,然后基于该角的所有或索引。假设 [0][0] 是拼图的左上角,那么如果您位于 [3][5],则您所在的左上角扇区将是

rows_per_sector (2) * (current_row (3) / rows_per_sector (2)) = 2

cols_per_sector (3) * (current_col (5) / cols_per_sector (3)) = 3

现在您可以使用 2,3 作为左上角,您可以在偏移量中编码以获得其余扇区。