DEV//UNIT

N ферзей

Расставить ферзей так, чтобы никто никого не бил: перебор с откатами.

время экспоненциальнопамять O(n)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function solveNQueens(n: number): number[][] {
2 const solutions: number[][] = []
3 const queens: number[] = [] // queens[row] = column
4
5 function place(row: number): void {
6 if (row === n) {
7 solutions.push([...queens])
8 return
9 }
10 for (let col = 0; col < n; col++) {
11 if (isSafe(row, col)) {
12 queens[row] = col
13 place(row + 1)
14 queens.pop() // откат
15 }
16 }
17 }
18
19 function isSafe(row: number, col: number): boolean {
20 for (let r = 0; r < row; r++) {
21 if (queens[r] === col) return false // столбец
22 if (Math.abs(queens[r]! - col) === row - r) return false // диагональ
23 }
24 return true
25 }
26
27 place(0)
28 return solutions
29}

Проблема

Расставить ферзей так, чтобы никто никого не бил: перебор с откатами.

Что вы видите

Доска: строка за строкой; клетка под боем гаснет, тупик откатывает ферзя назад.

Как это работает

Backtracking в чистом виде: выбор → рекурсия → откат. Проверка безопасности только по уже поставленным ферзям отсекает ветви рано. Скелет тот же, что у судоку и SAT-солверов.

Пошаговый разбор

  1. 01

    Строка

    Ферзь ставится по строке за раз.

  2. 02

    Проверка

    Столбец и диагонали заняты?

  3. 03

    Откат

    Тупик ниже — снимаем ферзя.

Complexity и ограничения

time
экспоненциально
space
O(n)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Судоку

Тот же backtracking на сетке 9×9.

Расписания

Задачи и слоты без конфликтов.

VLSI

Размещение чипов без пересечений.

Связанные алгоритмы

Shorts

«Тупик — значит откатись: N ферзей»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Тупик — значит откатись: N ферзей
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/n-queens