fork download
  1. #include <iostream>
  2. #include <set>
  3. #include <vector>
  4. #include <cmath>
  5.  
  6. using namespace std;
  7.  
  8. using sets = vector<vector<int>>;
  9.  
  10. void output(const vector<int>& v) {
  11. cout << "{";
  12. for (int i = 0; i < v.size(); ++i) {
  13. if (i > 0) cout << ", ";
  14. cout << v[i];
  15. }
  16. cout << "}\n";
  17. }
  18.  
  19. void rec(int index, const sets& s, vector<int>& v) {
  20. for (int next : s[index]) {
  21. v[index] = next;
  22. if (index + 1 == s.size()) {
  23. output(v);
  24. } else {
  25. rec(index+1, s, v);
  26. }
  27. }
  28. }
  29.  
  30. void non_rec(const sets& s) {
  31. int q = s[0].size();
  32. int k = s.size();
  33. vector<int> v(q);
  34. int cnt = (int)pow(q, k);
  35.  
  36. for (int i = 0; i < cnt; ++i) {
  37. int tmp = i;
  38. for (int j = 0; j < k; ++j) {
  39. v[j] = s[j][tmp % q];
  40. tmp /= q;
  41. }
  42. output(v);
  43. }
  44. }
  45.  
  46. int main() {
  47. sets s = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
  48. int q = s[0].size();
  49. vector<int> v(q);
  50. cout << "recursive\n";
  51. rec(0, s, v);
  52. cout << "non_recursive\n";
  53. non_rec(s);
  54. return 0;
  55. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
recursive
{1, 4, 7}
{1, 4, 8}
{1, 4, 9}
{1, 5, 7}
{1, 5, 8}
{1, 5, 9}
{1, 6, 7}
{1, 6, 8}
{1, 6, 9}
{2, 4, 7}
{2, 4, 8}
{2, 4, 9}
{2, 5, 7}
{2, 5, 8}
{2, 5, 9}
{2, 6, 7}
{2, 6, 8}
{2, 6, 9}
{3, 4, 7}
{3, 4, 8}
{3, 4, 9}
{3, 5, 7}
{3, 5, 8}
{3, 5, 9}
{3, 6, 7}
{3, 6, 8}
{3, 6, 9}
non_recursive
{1, 4, 7}
{2, 4, 7}
{3, 4, 7}
{1, 5, 7}
{2, 5, 7}
{3, 5, 7}
{1, 6, 7}
{2, 6, 7}
{3, 6, 7}
{1, 4, 8}
{2, 4, 8}
{3, 4, 8}
{1, 5, 8}
{2, 5, 8}
{3, 5, 8}
{1, 6, 8}
{2, 6, 8}
{3, 6, 8}
{1, 4, 9}
{2, 4, 9}
{3, 4, 9}
{1, 5, 9}
{2, 5, 9}
{3, 5, 9}
{1, 6, 9}
{2, 6, 9}
{3, 6, 9}