function out(array){
var result=true;
for (var i = 0; i < 9; i++)
{
for (var j = 0; j < 9; j++)
{
document.getElementById("input"+(i*9+j)).value=array[i][j];
if(array[i][j]==0)result=false;
}
}
return result;
}
function setOne(){
var result = false;
//目标:
// 遍历矩阵,当前是否可以简单刷新,或者已经可以发现出错.
for (var i = 0; i < 9; i++) {
for (var j = 0; j < 9; j++) {
//目标:
// (grid[i][j] == 0 && candidatNum[i][j][0] == 0) >> 没有候选数字,出错了
// (candidatNum[i][j][0] == 1) >> 候选数字唯一
// CheckNumInput(grid,candidatNum[i][j][10],i,j) >> 检查此数字是否符合逻辑
// 判断 没有候选数字||最后一个候选数字不符合逻辑的条件, 从这里回退或者返回出错
if (grid[i][j] == 0 && candidatNum[i][j][0] == 0||
(candidatNum[i][j][0] == 1&&!CheckNumInput(grid,candidatNum[i][j][10],i,j))) {
if (grid[i][j] == 0) {
result = false;
}
if (steps.length>0) {// 回退
pop(); // 当前标签已经被证明逻辑错误,废弃
return true;
} else {
if (!success) {
alert("栈为空 结束!"); //题目出错,结束
}
return false;
}
}
if (candidatNum[i][j][0] == 1) { //唯一选择
grid[i][j] = candidatNum[i][j][10]; // 更新矩阵
refreshStat3(candidatNum[i][j][10],i,j); // 更新行列宫
candidatNum[i][j][0] = 0; // 标记已选
result = true;
continue;
}
}
}
if (result == false) { //对于(candidatNum[i][j][0] != 1)的情况,进行筛选
return choose();
}
return result;
}
function refreshStat3( num, x, y) { // 更新行列宫
rows[x] |= 1<<num;
columns[y] |= 1<<num;
blook[parseInt(x / 3) * 3 + parseInt(y / 3)] |= 1 << num ;
Javascript 实现的数独解题算法网页实例(3)
内容版权声明:除非注明,否则皆为本站原创文章。