为什么解决n皇后难题的代码在javascript中不起作用

为什么解决n皇后难题的代码在javascript中不起作用,javascript,Javascript,为了好玩,我决定将可以在上面找到的代码从Matlab移植到Javascript var propagate = function(depth, board, counter) { console.log("Current state >> depth:", depth, " board: ", board, " counter: ", counter); var validSolution = checkSolution(board);

为了好玩,我决定将可以在上面找到的代码从Matlab移植到Javascript

     var propagate = function(depth, board, counter) {
      console.log("Current state >> depth:", depth, " board: ", board, " counter: ", counter);

      var validSolution = checkSolution(board);
      if ((depth == board.length + 1) && (validSolution)) {
        counter = counter + 1;
        console.log("Found solution [", counter, "] ", board);
      };

      if (depth <= board.length) {
        for (var i = 1; i <= board.length; i++) {
          if (!(board.indexOf(i) > -1)) {
            board[depth-1] = i;
            propagate(depth + 1, board, counter);
          };
        };
      };
    };
var propagate=函数(深度、板、计数器){
log(“当前状态>>深度:”,深度,“板:”,板,“计数器:”,计数器);
var validSolution=检查溶液(板);
如果((深度==线路板长度+1)和&(有效解决方案)){
计数器=计数器+1;
console.log(“找到解决方案[”,计数器“]”,板);
};

如果(depth当你将数组作为参数发送时,你不会得到数组的新副本,它仍然是相同的数组对象。这意味着当你返回时,电路板不会更改回来

您可以存储您更改的项目的上一个值,以便您可以在呼叫后将线路板更改回:

if (!(board.indexOf(i) > -1)) {
  var prev = board[depth-1];
  board[depth-1] = i;
  propagate(depth + 1, board, counter);
  board[depth-1] = prev;
}