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

标签 c++ logic sudoku

<分区>

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

整个拼图是 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 作为左上角,您可以在偏移量中编写代码以获得该扇区的其余部分。

关于c++ - 6x6 数独游戏,找出你所在的部门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28697810/

相关文章:

c++ - 如何解释 g++ 警告

c++ - Unicode 字符的小写

c++ - 复杂的 regex_match 在 C++ 中不起作用

java - for 循环如何遍历数组?

java - 无法理解递归如何与数独求解器一起工作

c++ - DynamicArray of struct - 添加元素而不创建结构变量/对象

python - 如何让我的代码等待点击?

mysql - 数据库内容无限嵌套

数独的 Javascript 递归?

c# - 解决数独中的裸三元组