N皇后算法可视化教学
通过交互式动画,深入理解经典算法的运行过程
backtrack.ts
1function solveNQueens(n: number) {2const board: number[] = Array(n).fill(-1)3const solutions: number[][] = []45function isSafe(row: number, col: number): boolean {6for (let i = 0; i < row; i++) {7// 检查同列8if (board[i] === col) return false9// 检查对角线10if (Math.abs(board[i] - col) === row - i) {11return false12}13}14return true15}1617function backtrack(row: number) {18// 找到一个解19if (row === n) {20solutions.push([...board])21return22}2324for (let col = 0; col < n; col++) {25if (isSafe(row, col)) {26// 放置皇后27board[row] = col28// 递归下一行29backtrack(row + 1)30// 回溯:移除皇后31board[row] = -132}33}34}3536backtrack(0)37return solutions38}
0
1
2
3
4
5
6
7
控制面板
412
快慢
进度
0 / 0
找到解
0
回溯法 (Backtracking)
经典的深度优先搜索策略,逐行尝试放置皇后,遇到冲突时回溯。
算法步骤:
- 1.从第一行开始,尝试在每一列放置皇后
- 2.检查是否与已放置的皇后冲突(同列、对角线)
- 3.如果安全,移动到下一行继续
- 4.如果当前行所有列都冲突,回溯到上一行
- 5.当所有行都成功放置皇后时,找到一个解
时间复杂度: O(N!)