我刚刚完成了一种可以成功解决数独板问题的回溯算法。但是,我想增加延迟,以便更容易看到。我假设我需要使用setTimeout()或setInterval()。我已经尝试在函数的开头添加它们,但是那没有用。所以我的问题是,如何构造该程序以增加延迟?
这是我的代码:
function backtracker(){
for(var i = 0; i < 9; i++){
for(var j = 0; j < 9; j++){
if(bd[i][j].value=="."){
for(var n=1;n<10;n++){
if(isValid(bd,i,j,n)){
bd[i][j].value=n;
if(backtracker(bd)){
return true;
}else{
bd[i][j].value=".";
}
}
}
return false;
}
}
}
return true;
}
我不知道像c或python这样的其他语言中的同步执行暂停的直接实现,例如“ sleep”函数。
但是您可以从现代javascript语法糖(异步/等待)中受益。
尝试这个技巧:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function backtracker() {
// this will srop execution two seconds 2s
await sleep(2000);
//
for (var i = 0; i < 9; i++) {
for (var j = 0; j < 9; j++) {
if (bd[i][j].value == ".") {
for (var n = 1; n < 10; n++) {
if (isValid(bd, i, j, n)) {
bd[i][j].value = n;
if (backtracker(bd)) {
return true;
} else {
bd[i][j].value = ".";
}
}
}
return false;
}
}
}
return true;
}