Решения задач на порождение комбинаторных объектов в своей основе имеют одну и ту же схему, которая предполагает ответ на следующие вопросы:
Примечание: вопросы 2 и 4, как правило, решаются крайне легко
Сама же процедура порождения всех комбинаций обычно имеет следующий вид:
процедура получитьВсеКомбинации
| получитьПервуюКомбинацию
| вывести Комбинацию
| пока не текущаяКомбинацияПоследняя выполнять
| | получитьСледующуюКомбинацию
| | вывести Комбинацию
| конецЦикла
|конецПроцедуры
В задачах этого листка:
07_01a
Напечатать все последовательности длины n из чисел 0.. k-1 в лексикографическом порядке
(начальная)
07_01b
Напечатать все последовательности длины n из чисел 0.. k-1 в обратном лексикографическом порядке
(базовая)
07_01c
Напечатать все последовательности длины n у которых i-ый член не превосходит i.
(базовая)
07_01d
Напечатать все последовательности длины n из чисел 0.. k-1 так, чтобы соседние последовательности (а также первая и последняя) отличались бы только в одной позиции и только на единицу.
(средняя)
07_02.c
Напечатать все подмножества множества 1 .. k.
(средняя)
07_01a.c
Напечатать все перестановки чисел 1 .. n. (то есть последовательности длины n, в которые каждое из этих чисел входит по одному разу).
(сложная)
07_01d.c То же, так, чтобы соседние последовательности (а также первая и последняя) получались бы друг из друга обменом лишь двух элементов
4. Перечислить все возрастающие последовательности длины k из чисел 1 .. n в лексикографическом порядке.
5.
6. Перечислить все вложения (т. е. функции, переводящие разные элементы в разные) множества {1..k} в {1..n}, где k не превышает n.
7. Перечислить все последовательности нулей и единиц длины 2n, содержащие n нулей и n единиц, такие, что в любом их начальном отрезке число единиц не превосходит числа нулей.
8. Перечислить все способы расстановки скобок в произведении n сомножителей. Порядок сомножителей не меняется, скобки полностью определяют порядок действий.
9. На окружности задано 2n пронумерованных точек Перечислить все способы провести nнепересекающихся хорд, с вершинами в этих точках.
10. Перечислить все способы разрезать выпуклый n–угольник на треугольники, проведя n–3 его диагонали.