私はbruteforceアルゴリズムを分析しており、1つの質問があります。JavaScript Sudokuソルバー。前の数字はどこから来たのですか?
var solveSudoku = function (grid, row, col) {
var field = findUnassignedLocation(grid, row, col);
row = field[0];
col = field[1];
if (row === -1) {
if (!newGameStatus) fillTheDom(grid);
return true;
}
for (var num = 1; num <= 9; num++) {
if (newGameStatus) {
num = Math.floor(Math.random() * 9) + 1;
}
if (isValid(grid, row, col, num)) {
console.log(row + ' ' + col)
grid[row][col] = num;
if (solveSudoku(grid, row, col)) {
return true;
}
console.log(row + ' ' + col)
grid[row][col] = 0;
}
}
return false;
}
var findUnassignedLocation = function (grid, row, col) {
var foundZero = false;
var location = [-1, -1];
while (!foundZero) {
if (row === 9) {
foundZero = true;
} else {
if (grid[row][col] === 0) {
location[0] = row;
location[1] = col;
foundZero = true;
} else {
if (col < 8) {
col++;
} else {
row++;
col = 0;
}
}
}
}
return location;
}
記入する番号がない場合(すべての数値が無効です)、再帰関数はfalseを返します。その後、何らかの形で以前の塗りつぶされたセルをリセットします。それはどのようにして最後のセルに戻りますか?
そのようなjavascriptのですか?関数が呼び出されるたびに実行コンテンツが作成されますか?各実行コンテンツには独自の変数と状態がありますか? – Xaoo
はい、ありがとうございます。これらの関数呼び出しはすべて独立していて、独自の変数を持っており、渡されたparamsを取得します。 –