#include <vector>
#include <iostream>
using namespace std;
#define SET_SIZE 5
int set[] = {1, 2, 3, 4, 5};
vector<vector<int> > all_combinations;
const int tuple_size = 3;
void recursive_comb(int step_val, int array_index, std::vector<int> tuple)
{
if (step_val == 0)
{
all_combinations.push_back(tuple); //<==We have the final combination
return;
}
for (int i = array_index; i < SET_SIZE; i++)
{
tuple.push_back(set[i]);
recursive_comb(step_val - 1, i + 1, tuple);
tuple.pop_back();
}
return;
}
void init_combinations()
{
std::vector<int> tuple;
tuple.reserve(tuple_size); //avoids needless allocations
recursive_comb(tuple_size, 0, tuple);
}
int main()
{
init_combinations();
cout << "Total Combinations: " << all_combinations.size() << endl;
for (int i=0; i < all_combinations.size(); i++)
{
cout << "{";
for (int j=0; j < tuple_size; j++)
{
cout << all_combinations[i][j] << " ";
}
cout << "}" << endl;
}
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGlvc3RyZWFtPgogCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKI2RlZmluZSBTRVRfU0laRSA1CiAKaW50IHNldFtdID0gezEsIDIsIDMsIDQsIDV9Owp2ZWN0b3I8dmVjdG9yPGludD4gPiBhbGxfY29tYmluYXRpb25zOwpjb25zdCBpbnQgdHVwbGVfc2l6ZSA9IDM7CiAKdm9pZCByZWN1cnNpdmVfY29tYihpbnQgc3RlcF92YWwsIGludCBhcnJheV9pbmRleCwgc3RkOjp2ZWN0b3I8aW50PiB0dXBsZSkKewogICAgaWYgKHN0ZXBfdmFsID09IDApCiAgICB7CiAgICAgICAgYWxsX2NvbWJpbmF0aW9ucy5wdXNoX2JhY2sodHVwbGUpOyAvLzw9PVdlIGhhdmUgdGhlIGZpbmFsIGNvbWJpbmF0aW9uCiAgICAgICAgcmV0dXJuOwogICAgfQogCiAgICBmb3IgKGludCBpID0gYXJyYXlfaW5kZXg7IGkgPCBTRVRfU0laRTsgaSsrKQogICAgewogICAgICAgIHR1cGxlLnB1c2hfYmFjayhzZXRbaV0pOwogICAgICAgIHJlY3Vyc2l2ZV9jb21iKHN0ZXBfdmFsIC0gMSwgaSArIDEsIHR1cGxlKTsKICAgICAgICB0dXBsZS5wb3BfYmFjaygpOwogICAgfQogCiAgICByZXR1cm47Cn0KIAp2b2lkIGluaXRfY29tYmluYXRpb25zKCkKewogICAgc3RkOjp2ZWN0b3I8aW50PiB0dXBsZTsKICAgIHR1cGxlLnJlc2VydmUodHVwbGVfc2l6ZSk7IC8vYXZvaWRzIG5lZWRsZXNzIGFsbG9jYXRpb25zCiAgICByZWN1cnNpdmVfY29tYih0dXBsZV9zaXplLCAwLCB0dXBsZSk7Cn0KIAppbnQgbWFpbigpCnsKICAgIGluaXRfY29tYmluYXRpb25zKCk7CiAgICBjb3V0IDw8ICJUb3RhbCBDb21iaW5hdGlvbnM6ICIgPDwgYWxsX2NvbWJpbmF0aW9ucy5zaXplKCkgPDwgZW5kbDsKIAogICAgZm9yIChpbnQgaT0wOyBpIDwgYWxsX2NvbWJpbmF0aW9ucy5zaXplKCk7IGkrKykKICAgIHsKICAgICAgICBjb3V0IDw8ICJ7IjsKICAgICAgICBmb3IgKGludCBqPTA7IGogPCB0dXBsZV9zaXplOyBqKyspCiAgICAgICAgewogICAgICAgICAgICBjb3V0IDw8IGFsbF9jb21iaW5hdGlvbnNbaV1bal0gPDwgIiAiOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8ICJ9IiA8PCBlbmRsOwogICAgfQogCiAgICByZXR1cm4gMDsKfQ==