我参与了我项目的最后一次尝试,但我找不到答案! 我有一个小数独求解器。但是,当它需要做一些回溯时,我无法使它工作。我需要一些帮助。
我的代码有一些荷兰名字,所以让我解释一下:
zoekNul() = findZero()
vierkant = square
CheckRK()= Check row column
Vulin() = Fillin()
代码尝试1到4(如果square是4x4)然后填充正确的数字。
[1, 0, 3, 4],
[2, 0, 4, 1],
[3, 4, 0, 2],
[4, 1, 2, 3]
这样可行,因为它不需要回溯
这不会,因为它必须做回溯:
[1, 0, 3, 4],
[2, 0, 4, 1],
[3, 0, 0, 2],
[4, 0, 2, 3]
这是我的代码:
var sq = [
[1, 0, 3, 4],
[2, 0, 4, 1],
[3, 4, 0, 2],
[4, 1, 2, 3]
];
var x;
var y;
var nMax = 4;
function zoekNul(vierkant) {
for (var i = 0; i < nMax; i++) {
for (var j = 0; j < nMax; j++) {
if (vierkant[i][j] === 0) {
x = i;
y = j;
return [x, y];
}
}
}
return [-1, -1];
}
function vulin(vierkant) {
if (zoekNul(vierkant)[0] == -1) {
alert(vierkant);
} else {
for (var w = 1; w < nMax + 1; w++) {
if (checkRK(vierkant, x, y, w) === true) {
vierkant[x][y] = w;
vulin(vierkant);
}
}
}
}
function checkRK(vierkant, x, y, w) {
var bool = true;
for (var k = 0; k < nMax && bool; k++) {
if (vierkant[x][k] == w || vierkant[k][y] == w) {
bool = false;
break;
}
}
return bool;
}
console.log(vulin(sq));
请注意,我对编程很新。我在老师的帮助下编写了代码。
提前致谢
PS:可以在这里找到一个jsfiddle链接: http://jsfiddle.net/45fuW/