}
/*********************
* 矩阵 数据分析
* 统计 剩余可选项
*********************/
function refreshStat(){
var over = true;
// 目标:
// 分解行/列/宫
for (var i = 0; i < 9; i++) {
rows[i] = 0; //行
columns[i] = 0; //列
blook[i] = 0; //宫
for (var j = 0; j < 9; j++) {
if (grid[i][j] != 0) {
rows[i] |= 1 << grid[i][j];
} else {
rows[i] &= ~(1 << grid[i][j]);
}
if (grid[j][i] != 0) {
columns[i] |= 1 << grid[j][i];
} else {
columns[i] &= ~(1 << grid[j][i]);
}
if (grid[parseInt(i / 3) * 3 + parseInt(j / 3)][i % 3 * 3 + j % 3] != 0) {
blook[i] |= 1 << grid[parseInt(i / 3 )* 3 + parseInt(j / 3)][i % 3 * 3 + j % 3];
}
}
}
// 目标:
// 遍历矩阵,进行候选标记candidatNum[i][j][0]
// candidatNum[i][j][0] = 0; >>>> 已有确定值
// candidatNum[i][j][0] = k; >>>> 可能值数目
// candidatNum[i][j][1] = 987654321x 2进制数位表示的可选数字
for (var i = 0; i < 9; i++) {
for (var j = 0; j < 9; j++) {
if (grid[i][j] != 0) {
candidatNum[i][j][0] = 0;
continue;
}
var size = 0;
over = false;
for (var k = 1; k < 10; k++) {
if (CheckNumInput(grid, k, i, j)) {
candidatNum[i][j][1] |= 1 << k;
candidatNum[i][j][10] = k;
over = false;
size++;
} else {
candidatNum[i][j][1] &= ~(1 << k);
}
}
candidatNum[i][j][0] = size; //标记剩余选项数目
}
}
return over;
}
Javascript 实现的数独解题算法网页实例(4)
内容版权声明:除非注明,否则皆为本站原创文章。