| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [c++] сгенерировать подмножества |
| Автор: 14SatanA88 19.8.2011, 21:10 | ||
| Доброго времени суток, уважаемые форумчане. Задача:Сгенерировать все k-элементные подмножества множества A из N чисел, A={1, 2, ..., N}. Пример: N=3, k=2, подмножества {1,2}, {1,3}, {2,3} Решение: Воспользуемся следующим алгоритмом генерации сочетаний по k элементов из множества A: В массиве B будут находиться индексы используемых на данном шаге элементов из A (общее их число k). В качестве начальной конфигурацией возьмем следующую: B[j]=j, j=1,...,k. Ищем B[j] с максимальным индексом j такое, что B[j]<n+j-k, увеличиваем это B[j] на 1, а для всех m>j полагаем B[m]=B[m-1]+1 (B[j] растут с ростом j, и мы ищем и увеличиваем на 1 такое B[j] с максимальным номером j, чтобы при заполнении возрастающими значениями элементов массива B[m], m>j, последний элемент B[k] не превосходил бы n). Если такого B[j] не существует, то генерация сочетаний для данного k закончена. Нужно закодить в плюсах Я пару раз пробовал, у меня какая-то ересь получается типа этого:
|
| Автор: volatile 20.8.2011, 01:36 | ||
Пример использования: http://liveworkspace.org/code/307bab6bcc914f2ed26c54b499636e53 |
| Автор: 14SatanA88 20.8.2011, 12:09 |
| volatile, спасибо, конечно, а без классов никак? если можно попроще, буду рад. |
| Автор: 14SatanA88 20.8.2011, 19:05 | ||
все, что я пока смог написать
но этот код дает не весь результат, а лишь часть. помогите довести его до полной дееспособности. |
| Автор: 14SatanA88 20.8.2011, 20:07 | ||
| все, вопрос решен получилось с использованием рекурсивной функции если кому интересен код
|
| Автор: wester 21.8.2011, 17:33 | ||
14SatanA88,
зачем тогда писать на плюсах ? легко и просто можно переписать на Си |
| Автор: 14SatanA88 23.8.2011, 17:26 | ||
я немного путаю ) |