1#ifndef ZONOOPT_GENUTILITIES_HPP_
2#define ZONOOPT_GENUTILITIES_HPP_
19namespace ZonoOpt::detail
23 void combinations_util(
const std::vector<T>& elements,
const size_t k,
const size_t start_index,
24 std::vector<T>& current_combination,
25 std::vector<std::vector<T>>& result)
28 if (current_combination.size() == k)
30 result.push_back(current_combination);
35 for (
size_t i = start_index; i < elements.size(); ++i)
38 if (elements.size() - i < k - current_combination.size())
44 current_combination.push_back(elements[i]);
47 combinations_util(elements, k, i + 1, current_combination, result);
50 current_combination.pop_back();
56 std::vector<std::vector<T>> get_combinations(
const std::vector<T>& input_set,
const size_t k)
58 if (k > input_set.size())
64 std::vector<T> elements(input_set.begin(), input_set.end());
66 std::vector<std::vector<T>> result;
67 std::vector<T> current_combination;
70 combinations_util(elements, k, 0, current_combination, result);
74 inline void print_str(std::stringstream& ss)
79 std::cout << ss.str() << std::endl;