34 lines
927 B
JavaScript
34 lines
927 B
JavaScript
function queenPuzzle(rows, columns) {
|
|
if (rows <= 0) {
|
|
return [[]];
|
|
} else {
|
|
return addQueen(rows - 1, columns);
|
|
}
|
|
}
|
|
|
|
function addQueen(newRow, columns, prevSolution) {
|
|
var newSolutions = [];
|
|
var prev = queenPuzzle(newRow, columns);
|
|
for (var i = 0; i < prev.length; i++) {
|
|
var solution = prev[i];
|
|
for (var newColumn = 0; newColumn < columns; newColumn++) {
|
|
if (!hasConflict(newRow, newColumn, solution))
|
|
newSolutions.push(solution.concat([newColumn]))
|
|
}
|
|
}
|
|
return newSolutions;
|
|
}
|
|
|
|
function hasConflict(newRow, newColumn, solution) {
|
|
for (var i = 0; i < newRow; i++) {
|
|
if (solution[i] == newColumn ||
|
|
solution[i] + i == newColumn + newRow ||
|
|
solution[i] - i == newColumn - newRow) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
console.log(queenPuzzle(8,8));
|