Javascript 打印N-Queen问题的所有解

Javascript 打印N-Queen问题的所有解,javascript,algorithm,recursion,Javascript,Algorithm,Recursion,N皇后是将N个国际象棋皇后放置在N×N棋盘上的问题,这样就不会有两个皇后互相攻击。例如,下面是4皇后问题的解决方案 N皇后是将N个国际象棋皇后放置在N×N棋盘上的问题,这样就不会有两个皇后互相攻击 我写了函数,但它是只打印一个解决方案。如何更新此函数以打印所有解决方案 皇后是“q”,空值是“-” 函数查找所有排列(n){ 常数allRes=[]; 功能有效(行、列、板){ //检查← 方向 对于(变量i=0;i=0&&j>=0;i--,j--){ 如果(板[i][j]=“q”){ 返回false

N皇后是将N个国际象棋皇后放置在N×N棋盘上的问题,这样就不会有两个皇后互相攻击。例如,下面是4皇后问题的解决方案

N皇后是将N个国际象棋皇后放置在N×N棋盘上的问题,这样就不会有两个皇后互相攻击

我写了函数,但它是只打印一个解决方案。如何更新此函数以打印所有解决方案

皇后是“q”,空值是“-”

函数查找所有排列(n){
常数allRes=[];
功能有效(行、列、板){
//检查← 方向
对于(变量i=0;i=0&&j>=0;i--,j--){
如果(板[i][j]=“q”){
返回false;
}
}
//检查↙ 方向

对于(var i=row,j=col;j>=0&&i,只需修改find函数以克隆结果数组,并对回溯进行一些调整:

function find(col, result) {
    if (col === n) {
      // this deep clone the 2d array
      allRes.push(JSON.parse(JSON.stringify(result)));
      return;
    }
    for (let i = 0; i < n; i++) {
        if (isValid(i, col, result)) {
            result[i][col] = "q";
            find(col + 1, result)
            result[i][col] = "-";
        }
    }
}
函数查找(列、结果){
如果(列===n){
//这是对2d阵列的深度克隆
allRes.push(JSON.parse(JSON.stringify(result));
返回;
}
for(设i=0;i
差不多了,只需修改find函数以克隆结果数组,并对回溯进行一些调整:

function find(col, result) {
    if (col === n) {
      // this deep clone the 2d array
      allRes.push(JSON.parse(JSON.stringify(result)));
      return;
    }
    for (let i = 0; i < n; i++) {
        if (isValid(i, col, result)) {
            result[i][col] = "q";
            find(col + 1, result)
            result[i][col] = "-";
        }
    }
}
函数查找(列、结果){
如果(列===n){
//这是对2d阵列的深度克隆
allRes.push(JSON.parse(JSON.stringify(result));
返回;
}
for(设i=0;i
谢谢!我尝试使用arr.slice()代替JSON,但似乎它只适用于1d数组谢谢!我尝试使用arr.slice()代替JSON,但似乎它只适用于1d数组