问题描述:在 n×n 的棋盘上放置 n 个皇后,使得它们不能互相攻击。即任意两个皇后不能在同一行、同一列或同一对角线上 实现步骤: 从第一行开始,尝试在每一列放置皇后 对于每个位置,检查当前放置是否会导致冲突 如果不冲突,则继续在下一行放置皇后 如果冲突或所有列都尝试过,则回退到上一步,尝试其他位置 分析: 时间复杂度: O(n!),因为需要尝试所有可能的放置方式 空间复杂度: O(n2),因为需要存储棋盘和解决方案 实现代码 function solveNQueens(n) { const solutions = []; const board = Array.from({ length: n }, () => Array(n).fill('.')); function isSafe(row, col) { for (let i = 0; i < row; i++) { if (board[i][col] === 'Q') return false; } for (let i = row, j = col; i >= 0 && j >= 0; i--, j--) { if (board[i][j] === 'Q') return false; } for (let i = row, j = col; i >= 0 && j < n; i--, j++) { if (board[i][j] === 'Q') return false; } return true; } function backtrack(row) { if (row === n) { solutions.push(board.map(r => r.join(''))); return; } for (let col = 0; col < n; col++) { if (isSafe(row, col)) { board[row][col] = 'Q'; backtrack(row + 1); board[row][col] = '.'; } } } backtrack(0); return solutions; } console.log(solveNQueens(4)); // 输出: 所有4皇后的解法