JS向Sudoku backracker添加延迟

问题描述 投票:1回答:1

我刚刚完成了一种可以成功解决数独板问题的回溯算法。但是,我想增加延迟,以便更容易看到。我假设我需要使用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;
}
javascript settimeout setinterval backtracking recursive-backtracking
1个回答
0
投票

我不知道像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;
}


© www.soinside.com 2019 - 2024. All rights reserved.