【问题标题】:Why is my result variable not being changed?为什么我的结果变量没有被改变?
【发布时间】:2021-10-31 14:57:55
【问题描述】:

所以我正在尝试解决 N-Queens 问题,当我在求解函数中使用 console.log(result) 时,我得到了正确的输出。但是当我最后返回结果数组时,结果数组似乎根本没有发生变异,因为我得到 [[-, -, -,-], [-,-,-,-]]

function solveNQueens(n) {
  let result = [];
  let buffer = Array(n).fill('-');
  
  function solve(bufferIndexRow) {
    if (bufferIndexRow === n) {
      result.push(buffer);
      return console.log('FOUND ONE SOLUTION'); // Finished last row, filled queens array
    }

    for (let column = 0; column < n; column++) {
      buffer[bufferIndexRow] = column;
      if (isValid(bufferIndexRow, column)) {
        solve(bufferIndexRow + 1);
      }
      buffer[bufferIndexRow] = '-'
    }
  }
  
 function isValid(row, col) {
    for(let i = 0;  i< row; i++) {
      if(buffer[i] == col || Math.abs(i - row) == Math.abs(buffer[i]- col))
          return false;
    }
    return true;
  }
  solve(0);
  return result;
}

console.log(solveNQueens(4));

【问题讨论】:

    标签: algorithm recursion backtracking n-queens


    【解决方案1】:

    你需要传入缓冲区来求解,以便它可以将更新的缓冲区推送到结果

    【讨论】:

      猜你喜欢
      • 2022-12-06
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      相关资源
      最近更新 更多