fork(4) download
  1. #include <string>
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. std::vector<std::size_t> initialize(std::size_t depth)
  6. {
  7. std::vector<std::size_t> res(depth - 1);
  8.  
  9. int i = 1;
  10. for (auto& e : res) {
  11. e = i;
  12. i += 2;
  13. }
  14. return res;
  15. }
  16.  
  17. bool increase(std::vector<std::size_t>& indexes, std::size_t max)
  18. {
  19. auto m = max;
  20. auto rit = indexes.rbegin();
  21. for (; rit != indexes.rend(); ++rit) {
  22. ++*rit;
  23. if (*rit + 1 != m) {
  24. m = *rit;
  25. for (auto it = rit.base(); it != indexes.end(); ++it) {
  26. *it = m + 2;
  27. m += 2;
  28. }
  29. if (m < max) {
  30. return true;
  31. }
  32. }
  33. m = *rit - 1;
  34. }
  35. return false;
  36. }
  37.  
  38.  
  39. template <typename V>
  40. void print(const V& v, std::size_t last)
  41. {
  42. auto prev = 0;
  43. for (const auto& e : v) {
  44. std::cout << prev << "-" << e << " ";
  45. prev = e + 1;
  46. }
  47. std::cout << v.back() + 1 << "-" << last;
  48. std::cout << std::endl;
  49. }
  50.  
  51.  
  52. int main()
  53. {
  54. auto v = initialize(3);
  55. const auto size = 6;
  56.  
  57. do
  58. {
  59. print(v, size);
  60. } while (increase(v, size));
  61. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
0-1 2-3 4-6
0-1 2-4 5-6
0-2 3-4 5-6