- Home
- /
- Tutorials
- /
- DSA Tutorial
- /
- Classic Backtracking Problems
Backtracking
Classic Backtracking Problems
These three cover the shapes: placing pieces under constraints, searching a grid, and filling in blanks. Everything else is a variation.
N-Queens - placing under constraints
Place n queens on an n×n board so none attack each other. One queen per row, so the only question is which column.
N-Queens
javascript
function solveNQueens(n) {
const results = []
const columns = new Set()
const diagonal = new Set() // row - col
const antiDiagonal = new Set() // row + col
const placement = []
function place(row) {
if (row === n) {
results.push([...placement])
return
}
for (let col = 0; col < n; col++) {
// O(1) conflict check instead of scanning the board.
if (columns.has(col)) continue
if (diagonal.has(row - col)) continue
if (antiDiagonal.has(row + col)) continue
columns.add(col)
diagonal.add(row - col)
antiDiagonal.add(row + col)
placement.push(col)
place(row + 1)
placement.pop()
antiDiagonal.delete(row + col)
diagonal.delete(row - col)
columns.delete(col)
}
}
place(0)
return results
}
console.log(solveNQueens(8).length) // 92