6x6数独谜题,找到你所在的行业

时间:2015-02-24 14:02:49

标签: c++ logic sudoku

我正在制作数独求解器,我需要检查当前扇区中的数字是否空闲,我已经检查了数字的行和列,所以剩下的是扇区。< / p>

整个难题是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;
}

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

1 个答案:

答案 0 :(得分: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作为左上角,你可以在偏移量中编码以获得剩下的扇区。