80 likes | 395 Views
Перебор и способы его сокращения. Даны N упорядоченных множеств U 1 , U 2 , … U N Требуется построить вектор A = (a 1 , a 2 , …, a N ) , удовлетворяющий заданному множеству условий и ограничений, где. Общая схема перебора с возвратом ( backtrack).
E N D
Даны N упорядоченных множеств U1, U2, … UN Требуется построить вектор A = (a1, a2, …, aN), удовлетворяющий заданному множеству условий и ограничений, где Общая схема перебора с возвратом (backtrack)
Общая схема перебора с возвратом(backtrack) Сложность переборных алгоритмов – экспоненциальная (O(CN)), т.е. использовать переборные алгоритмы допустимо при небольших ограничениях на входные данные
На шахматной доске размера N*N требуется расставить N ферзей таким образом, чтобы ни один ферзь не атаковал другого. По правилам шахмат ферзь атакует все фигуры на одной с ним вертикали, горизонтали и диагонали. Задача о расстановке ферзей Пример для N = 4
В допустимом размещении каждый ферзь занимает отдельную вертикаль и горизонталь. Поэтому каждое размещение ферзей можно хранить в одномерном массиве H, каждый элемент которого H[i] обозначает номер горизонтали, занятый ферзем в вертикали i. Например: i: 1 2 3 4 H[i]: 3 1 4 1 Задача о расстановке ферзей
Есть n способов разместить ферзя в первой вертикали. При каждом расположении ферзя в первой вертикали есть n положений во второй вертикали; из них сразу отбросим недопустимые (знак «*»): Задача о расстановке ферзей
Задача о расстановке ферзей Функция Testпроверяет допустимость размещения <H[1], H[2], …, H[i]> при условии, что <H[1], …, H[i-1]> допустимо.