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);