我想创建一个数独求解器,但我注意到对于专家级数独,需要几秒钟才能显示结果......这是我的一段代码:
function possible(board, y, x, n) {
for (let i = 0; i < 9; i++) {
if (board[y][i] === n || board[i][x] === n) {
return false;
}
}
const xSquare = Math.floor(x / 3) * 3;
const ySquare = Math.floor(y / 3) * 3;
for (let j = 0; j < 3; j++) {
for (let i = 0; i < 3; i++) {
if (board[ySquare + i][xSquare + j] === n) {
return false;
}
}
}
return true;
}
function solve(board) {
for (let y = 0; y < 9; y++) {
for (let x = 0; x < 9; x++) {
if (board[y][x] === 0) {
for (let n = 1; n <= 9; n++) {
if (possible(board, y, x, n)) {
board[y][x] = n;
if (solve(board)) {
return board;
}
}
}
board[y][x] = 0;
return false;
}
}
}
return board;
}
我的函数 possible() 是查看 x 轴和 y 轴是否具有相同的数字,以及正方形(3x3)是否与当前框具有相同的数字。
我的函数solver()函数用于查看数组中是否不再有0以及可能的函数possible()是否返回true。
我认为我的问题来自于 possible () 函数中的 double for ,它从整个数组开始,但我不知道如何让它停止在这种情况下......
吃鸡游戏
扬帆大鱼
相关分类