N Queens - Practice

by Hari Menon

JavaScript

'use strict';

var GRID_SIZE;
function nQueens(n) {
    GRID_SIZE = n;
    var results = [], columns = new Array(n);
    placeQueens(0, columns, results);
    console.log(results.join('\n'));
    console.log(results.length);
}

function placeQueens(row, columns, results) {
    if (row === GRID_SIZE) {
        results.push(columns.slice());
    } else {
        for (var column = 0; column < GRID_SIZE; column++) {
            if (checkValid(row, column, columns)) {
                columns[row] = column;
                placeQueens(row + 1, columns, results);
            }
        }
    }
}

function checkValid(row, column, columns) {
    for (var row0 = 0; row0 < row; row0++) {
        var column0 = columns[row0];
        if (column === column0) return false;
        var columnDistance = Math.abs(column - column0);
        var rowDistance = row - row0;
        if (columnDistance === rowDistance) return false;
    }
    return true;
}

nQueens(4);