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