fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. using namespace std;
  5.  
  6. bool UpdateCombination (std::vector<int> &comboindices, int count, int n)
  7. {
  8. for (int i = 1; i <= n; ++i)
  9. {
  10. if (comboindices[n - i] < count - i)
  11. {
  12. ++comboindices[n - i];
  13. for (int j = n - i + 1; j < n; ++j)
  14. {
  15. comboindices[j] = comboindices[j-1] + 1;
  16. }
  17. return false;
  18. }
  19. }
  20. return true;
  21. }
  22.  
  23. void ResetCombination (std::vector<int> &comboindices, int n)
  24. {
  25. comboindices.resize(n);
  26. for (int i = 0; i < n; ++i)
  27. {
  28. comboindices[i] = i;
  29. }
  30. }
  31.  
  32. void PrintArrays (const std::vector<std::vector<std::string>> items, int count)
  33. {
  34. std::vector<std::vector<int>> indices;
  35. int n = items.size();
  36. indices.resize(items.size());
  37.  
  38. for(auto i = indices.begin (); i != indices.end (); ++i)
  39. {
  40. ResetCombination((*i),count);
  41. }
  42.  
  43. while (true) //Iterate until we've used all of the last array of items
  44. {
  45. for (int i = 0; i < n; ++i)
  46. {
  47. cout << "{";
  48. for (auto j = indices[i].begin (); j != indices[i].end (); ++j)
  49. {
  50. int ji = (*j);
  51. cout << (items[i])[ji] << " ";
  52. }
  53. cout << "} ";
  54.  
  55. }
  56. cout << endl;
  57.  
  58. //Update to the next indice
  59. for (int i = n - 1; i >= 0; --i)
  60. {
  61. bool done = UpdateCombination (indices[i],items[i].size(),count);
  62. if (!done)
  63. {
  64. break;
  65. }
  66. else if (done && i == 0)
  67. {
  68. return; //Escape.
  69. }
  70. else
  71. {
  72. ResetCombination(indices[i],count);
  73. }
  74. }
  75. }
  76.  
  77. }
  78. //{A,B,C,D},{A,B},{A,B},{A,B,C,D,E,F},{A,B}
  79.  
  80.  
  81. int main() {
  82.  
  83. vector<vector<string>> lists;
  84. lists.resize(5);
  85. lists[0].push_back("A");
  86. lists[0].push_back("B");
  87. lists[0].push_back("C");
  88. lists[0].push_back("D");
  89.  
  90. lists[1].push_back("A");
  91. lists[1].push_back("B");
  92.  
  93. lists[2].push_back("A");
  94. lists[2].push_back("B");
  95.  
  96. lists[3].push_back("A");
  97. lists[3].push_back("B");
  98. lists[3].push_back("C");
  99. lists[3].push_back("D");
  100. lists[3].push_back("E");
  101. lists[3].push_back("F");
  102.  
  103. lists[4].push_back("A");
  104. lists[4].push_back("B");
  105.  
  106.  
  107.  
  108. PrintArrays(lists,2);
  109. return 0;
  110. }
Success #stdin #stdout 0s 3036KB
stdin
Standard input is empty
stdout
{A B } {A B } {A B } {A B } {A B } 
{A B } {A B } {A B } {A C } {A B } 
{A B } {A B } {A B } {A D } {A B } 
{A B } {A B } {A B } {A E } {A B } 
{A B } {A B } {A B } {A F } {A B } 
{A B } {A B } {A B } {B C } {A B } 
{A B } {A B } {A B } {B D } {A B } 
{A B } {A B } {A B } {B E } {A B } 
{A B } {A B } {A B } {B F } {A B } 
{A B } {A B } {A B } {C D } {A B } 
{A B } {A B } {A B } {C E } {A B } 
{A B } {A B } {A B } {C F } {A B } 
{A B } {A B } {A B } {D E } {A B } 
{A B } {A B } {A B } {D F } {A B } 
{A B } {A B } {A B } {E F } {A B } 
{A C } {A B } {A B } {A B } {A B } 
{A C } {A B } {A B } {A C } {A B } 
{A C } {A B } {A B } {A D } {A B } 
{A C } {A B } {A B } {A E } {A B } 
{A C } {A B } {A B } {A F } {A B } 
{A C } {A B } {A B } {B C } {A B } 
{A C } {A B } {A B } {B D } {A B } 
{A C } {A B } {A B } {B E } {A B } 
{A C } {A B } {A B } {B F } {A B } 
{A C } {A B } {A B } {C D } {A B } 
{A C } {A B } {A B } {C E } {A B } 
{A C } {A B } {A B } {C F } {A B } 
{A C } {A B } {A B } {D E } {A B } 
{A C } {A B } {A B } {D F } {A B } 
{A C } {A B } {A B } {E F } {A B } 
{A D } {A B } {A B } {A B } {A B } 
{A D } {A B } {A B } {A C } {A B } 
{A D } {A B } {A B } {A D } {A B } 
{A D } {A B } {A B } {A E } {A B } 
{A D } {A B } {A B } {A F } {A B } 
{A D } {A B } {A B } {B C } {A B } 
{A D } {A B } {A B } {B D } {A B } 
{A D } {A B } {A B } {B E } {A B } 
{A D } {A B } {A B } {B F } {A B } 
{A D } {A B } {A B } {C D } {A B } 
{A D } {A B } {A B } {C E } {A B } 
{A D } {A B } {A B } {C F } {A B } 
{A D } {A B } {A B } {D E } {A B } 
{A D } {A B } {A B } {D F } {A B } 
{A D } {A B } {A B } {E F } {A B } 
{B C } {A B } {A B } {A B } {A B } 
{B C } {A B } {A B } {A C } {A B } 
{B C } {A B } {A B } {A D } {A B } 
{B C } {A B } {A B } {A E } {A B } 
{B C } {A B } {A B } {A F } {A B } 
{B C } {A B } {A B } {B C } {A B } 
{B C } {A B } {A B } {B D } {A B } 
{B C } {A B } {A B } {B E } {A B } 
{B C } {A B } {A B } {B F } {A B } 
{B C } {A B } {A B } {C D } {A B } 
{B C } {A B } {A B } {C E } {A B } 
{B C } {A B } {A B } {C F } {A B } 
{B C } {A B } {A B } {D E } {A B } 
{B C } {A B } {A B } {D F } {A B } 
{B C } {A B } {A B } {E F } {A B } 
{B D } {A B } {A B } {A B } {A B } 
{B D } {A B } {A B } {A C } {A B } 
{B D } {A B } {A B } {A D } {A B } 
{B D } {A B } {A B } {A E } {A B } 
{B D } {A B } {A B } {A F } {A B } 
{B D } {A B } {A B } {B C } {A B } 
{B D } {A B } {A B } {B D } {A B } 
{B D } {A B } {A B } {B E } {A B } 
{B D } {A B } {A B } {B F } {A B } 
{B D } {A B } {A B } {C D } {A B } 
{B D } {A B } {A B } {C E } {A B } 
{B D } {A B } {A B } {C F } {A B } 
{B D } {A B } {A B } {D E } {A B } 
{B D } {A B } {A B } {D F } {A B } 
{B D } {A B } {A B } {E F } {A B } 
{C D } {A B } {A B } {A B } {A B } 
{C D } {A B } {A B } {A C } {A B } 
{C D } {A B } {A B } {A D } {A B } 
{C D } {A B } {A B } {A E } {A B } 
{C D } {A B } {A B } {A F } {A B } 
{C D } {A B } {A B } {B C } {A B } 
{C D } {A B } {A B } {B D } {A B } 
{C D } {A B } {A B } {B E } {A B } 
{C D } {A B } {A B } {B F } {A B } 
{C D } {A B } {A B } {C D } {A B } 
{C D } {A B } {A B } {C E } {A B } 
{C D } {A B } {A B } {C F } {A B } 
{C D } {A B } {A B } {D E } {A B } 
{C D } {A B } {A B } {D F } {A B } 
{C D } {A B } {A B } {E F } {A B }