我正在做一个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不知道格式)
这个部门只剩下两个数字,我需要从我的行号和列号中找出我应该检查的位置,但是这个解决方案让我无法理解,我不知道该如何做。
解决方案:
对任何有兴趣的人来说,我都是这样做的:
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;
}在函数中,这将检查当前设置号在该位置上是否可行。
发布于 2015-02-24 14:18:02
如果有一个划分为扇区的网格,则可以找到该扇区的一个角,然后将该扇区的所有或索引作为基础。假设是你的拼图的左上角,那么如果你在3岁的话,你所处的左上角区域将会是
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作为左上角,并且可以在偏移量中编码,以获得扇区的其余部分。
https://stackoverflow.com/questions/28697810
复制相似问题