Вероятно, уже слишком поздно, чтобы ответить, но в любом случае ...
Задача не имеет полиномиального решения по очень простой причине: возможно, экспоненциально много минимальных циклов в (ди) графе.
Рассмотрим n/2
наборов размера 2 и расположим их циклически: A_1, ..., A_{n/2}
и используйте соглашение A_{n/2+1}=A_1
. Поместите ребро между двумя вершинами тогда и только тогда, когда они лежат в наборах последовательных индексов (поэтому элементы в A_{n/2}
также связаны с элементами в A_1
в соответствии с вышеуказанным соглашением). Если вас интересуют орграфы, а не простые графы, направьте ребра так, чтобы они всегда указывали на вершину, лежащую в наборе с большим индексом, или, в случае A_{n/2}
и A_1
, указывайте на вершины в A_{n/2}
к тем, кто в A_1
.
Очевидно, что в этом графе длины n/2
есть 2^{n/2}
минимальные циклы, потому что все подмножества размера n/2
, содержащие ровно одну вершину в каждом A_i
, являются таким циклом. Если вы хотите перечислить их все с помощью алгоритма, этот алгоритм должен сделать как минимум 2^{n/2}
шагов.