Перебор с возвратом на Python: как решать + 3 задачи с проверкой

Перебор с возвратом (backtracking) — это приём, когда вы строите ответ по частям: выбрали первый элемент, затем второй, и так далее, а если упёрлись в запрет, откатываетесь и пробуете другой вариант. В олимпиадных задачах так решают распределения и расстановки: назначить каждому персонажу квест, собрать пати по правилам, поставить роботов на позиции, выбрать порядок действий с ограничениями.

Как распознать backtracking по условию:

Суть приёма: держим текущее частичное решение и множество уже использованных элементов, добавляем следующий выбор и сразу проверяем локальные запреты. Если продолжать нельзя — возвращаемся на шаг назад. Это ускоряет решение, потому что вы не перебираете заведомо невозможные продолжения и можете остановиться сразу, как только нашли первый подходящий ответ в правильном порядке (для лексикографического минимума — перебирать кандидатов по возрастанию).

С чего начать учиться:

Ниже — задачи с автопроверкой и разбором подхода к перебору с возвратом.

Задачи по теме «Перебор с возвратом»

Смежные темы

Весь каталог задач

Куда дальше