SOURCE

function isValid(row, col, n, chessboard) {
    //检查同一列上不同行a
    for (var i = 0; i < row; i++) {
        //剪枝
        if (chessboard[i][col] == 'Q')
            return false;
    }
    //检查45度
    for (var i = row - 1, j = col + 1; i >= 0 && j < n; i-- , j++) {
        if (chessboard[i][j] == 'Q')
            return false;
    }
    //检查135度
    for (var i = row - 1, j = col - 1; i >= 0 && j >= 0; i-- , j--) {
        if (chessboard[i][j] == 'Q')
            return false;
    }
    return true;
}
function Queen(n, row) {
    var result = [];
    var chessboard = new Array(n);
    for (var i = 0; i < chessboard.length; i++) {
        chessboard[i] = new Array(n).fill('.');
    }
    backtracking(n, row, chessboard, result);
    result.forEach(function (value) {
        value.forEach(function(q){
            console.log(q);
        })
        console.log('\n');
    });
}
function backtracking(n, row, chessboard, result) {
    if (row == n) {
        result.push(JSON.parse(JSON.stringify(chessboard)));
        return;
    }
    for (var col = 0; col < n; col++) {
        if (isValid(row, col, n, chessboard)) {
            chessboard[row][col] = 'Q';
            backtracking(n, row + 1, chessboard, result);
            chessboard[row][col] = '.';
        }
    }
}


//数组
var n = 8;
Queen(n, 0);
console 命令行工具 X clear

                    
>
console