在每个解决方案中暂停执行一段时间,以使动画可见

Pause execution for sometime at each solution to make animation visible

本文关键字:动画 一段时间 执行 解决方案 暂停      更新时间:2023-09-26

我已经用javascript中的回溯对N-Queen问题进行了编码。

我想做什么

我想在脚本每次到达解决方案时都能看到它的执行情况,并使用动画显示解决方案。

问题出在哪里

代码执行速度如此之快,以至于我看不到任何颜色转换。

这是我的代码的一部分(我想在这里观察一下脚本的执行情况)。有关完整代码,请参阅http://jsfiddle.net/a603smud/1/

function placeQueen(row){
    for(var i=0;i<N && row<N;i++){
      chess[row][i] = 1;
      var temp = row*N+i+1;
      //place a Queen (red color)
      $('#'+temp).css("background-color","red");
      //check if place is safe
      if(check(row,i)){
        if(row==N-1){
           //place is safe and it is last row then
           //solution found 
           //stop execution for a second 
           //then continue
           print();
        }
        else{
          setTimeout(function(){
              placeQueen(row+1);
          },1000);
        }
      }
      //remove the Queen (backtracking)
      $('#'+temp).css("background-color","blue");
      chess[row][i]=0;
    }
} 

红色:女王被放在盒子上蓝色:盒子是空的

如有任何帮助,我们将不胜感激。

感谢@bergi和所有人的宝贵建议我使用一个数组来存储所有结果,然后使用setInterval函数模拟结果

var solutionArray = [];
// run the algorithm and do
solutionArray.push(tempResult);
// on every step
var counter=0;
var myVar = setInterval(function(){ 
    simulate(solutionArray[counter++]);
    if(counter>=92){
        clearInterval(myVar);
    }
    setTimeout(function(){
        removeSimulation(solutionArray[counter]);
    },600);
}, 1000);

这是完整代码的链接