我正在尝试编写一个函数,该函数接受三个位向量,表示从位置 1-9 开始数独谜题的行、列和块中使用的数字。一个单元格只能使用未使用的数字,并且该函数应该返回所有向量中的数字是否强制一种可能性或是否存在多种可能性。我认为这意味着我必须合并所有三个向量,然后确定结果模式中“未设置”位的位置。
然而,我的函数在 gdb 中似乎并没有返回正确的掩码,即使它是受到这个推导的启发:http: //graphics.stanford.edu/~seander/bithacks.html#MaskedMerge
我正在尝试将一组合并到两组中,然后将第三组合并到前一个合并中,得出最终合并中 1 的数量,然后减去它以得出有多少个 0。
然后,我编写了以下函数:
bool possibilities(unsigned short row, unsigned short col, unsigned short bloc)
{
unsigned int mask = (1 << col) - 1;
unsigned int inbw = (row & ~mask) | (col & mask);
unsigned int mask2 = (1 << bloc) - 1;
unsigned int final = (inbw & ~mask2) | (bloc & mask2);
int num_1s;
while (result != 0) {
result &= (result - 1);
num_1s++;
}
int zeroes = 32 - num_1s; // 32 being the presumed number of bits in a short.
if (zeroes == 1) return true;
return false;
}