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