N Queens

by Hari Menon

JavaScript

'use strict';

function nQueens(n) {
    var BOARD_SIZE = n,
        board = Array.apply(null, Array(n)).map(Number.prototype.valueOf, -1),
        results = [];
    findSafeColumn(0, board, BOARD_SIZE, results);
    console.log(results.join('\n'));
    console.log(results.length);
}

function findSafeColumn(row, board, BOARD_SIZE, results) {
    if (row === BOARD_SIZE) {
        results.push(board.slice());
    } else {
        for (var col = 0; col < BOARD_SIZE; col++) {
            if (isSafeColumn(board, row, col)) {
                board[row] = col;
                findSafeColumn(row + 1, board, BOARD_SIZE, results);
            }
        }
    }
}

function isSafeColumn(board, row, column) {
    for (var row1 = 0; row1 < row; row1++) {
        var column1 = board[row1];
        var columnDistance = Math.abs(column1 - column);
        var rowDistance = row - row1;
        if (column === column1) { // same column
            return false;
        }
        if (rowDistance === columnDistance) {
            return false;
        }
    }
    return true;
}

nQueens(8);