N-Queens
HardArrayBacktracking
Solution
export function solveNQueens(n: number): string[][] {
const result: string[][] = [];
const stack: number[] = [];
function createRow(index: number) {
const row = new Array(n).fill('.');
row[index] = 'Q';
return row.join('');
}
function isPossible(col: number, row: number, index: number) {
return !(col === index || stack.length - row === Math.abs(col - index));
}
function backtracking(): void {
if (stack.length === n) {
result.push(stack.map(createRow));
return;
}
for (let i = 0; i < n; i++) {
if (stack.every((row, col) => isPossible(row, col, i))) {
stack.push(i);
backtracking();
stack.pop();
}
}
return;
}
backtracking();
return result;
}