Given non-negative integers `m` and `n`, generate all size `m` combinations of the integers from 0 to `n-1` in sorted order (each combination is sorted and the entire table is sorted).

For example, `3 comb 5` is

0 1 2 0 1 3 0 1 4 0 2 3 0 2 4 0 3 4 1 2 3 1 2 4 1 3 4 2 3 4

If it is more “natural” in your language to start counting from `1` instead of `0` the combinations can be of the integers from `1` to `n`.

#include <algorithm> #include <iostream> #include <string> void comb(int N, int K) { std::string bitmask(K, 1); // K leading 1's bitmask.resize(N, 0); // N-K trailing 0's // print integers and permute bitmask do { for (int i = 0; i < N; ++i) // [0..N-1] integers { if (bitmask[i]) std::cout << " " << i; } std::cout << std::endl; } while (std::prev_permutation(bitmask.begin(), bitmask.end())); } int main() { comb(5, 3); }

- Output:

0 1 2 0 1 3 0 1 4 0 2 3 0 2 4 0 3 4 1 2 3 1 2 4 1 3 4 2 3 4

Content is available under GNU Free Documentation License 1.2.