问题描述
const puzzle1 = [[0,2,6,7,1],[ 6,8,9,0],[ 1,4,5,[ 8,1,[ 0,3,8],4],6],[ 7,0]];
const puzzle2 = [[5,9],[ 3,2],[ 4,[ 2,3],5],7],[ 9,0]]; // 6,8
var dummy;
dummy = puzzle2;
function poss(x,y,n) {
for(let i=0;i<dummy.length;i++) {
if (dummy[x][i] === n) { return false}
if (dummy[i][y] === n) { return false}
}
// find the group start for x and y
groupSize = Math.sqrt(dummy.length);
yStart = Math.floor(y/groupSize);
xStart = Math.floor(x/groupSize);
// check numbers in the gridgroup
for (let i=0;i<groupSize;i++) {
for (let j=0;j<groupSize;j++) {
if (dummy[i + yStart*groupSize][j + xStart*groupSize] === n) { return false}
}
}
return true;
}
function Solve() {
for(let y=0;y<dummy.length;y++) {
for(let x=0;x<dummy.length;x++) {
if (dummy[y][x] === 0) {
for (let n=1;n<10;n++) {
if (poss(y,x,n)) {
dummy[y][x] = n;
Solve();
dummy[y][x] = 0;
}
}
return;
}
}
}
console.log(dummy);
}
我很确定这种逻辑可以解决问题,但是我似乎无法用代码表达它。到目前为止,我遇到了两个问题,
Uncaught TypeError: Cannot set property '9' of undefined
at Solve (script.js:57)
at Solve (script.js:56)
at <anonymous>:1:1
之所以发生这种情况,是因为x和y都等于9,它们不应该作为for循环都只能在x(或y) 逻辑来自一个基于python的视频:https://www.youtube.com/watch?v=G_UYXzGuqvM&t=394s 编辑 第二个问题现在已解决,但现在返回未解决的难题。因为它和基本拼图完全一样。在chrome上使用调试器时,我一直在浏览整个过程,它实际上完全解决了难题,但是即使它是正确的,它也会将所有内容重置为0。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)