I set a vector list, for example :
vector<VectorXi> Test;
Test.push_back(VectorXi(0,1));
Test.push_back(VectorXi(0,1,2));
Test.push_back(VectorXi(0));
Test.push_back(VectorXi(0,1));
Test.push_back(VectorXi(0,1,2,3));
PrintAllCombins(Test)
And now I want to get all combinations of indexes :
0, 0, 0, 0, 0
0, 0, 0, 0, 1
0, 0, 0, 0, 2
0, 0, 0, 0, 3
0, 0, 0, 1, 0
0, 0, 0, 1, 1
0, 0, 0, 1, 2
0, 0, 0, 1, 3
0, 0, 1, 0, 0
0, 0, 1, 0, 1
0, 0, 1, 0, 2
0, 0, 1, 0, 3
... and so on
If i use for or while loop suitably, then it works I guess, but I encounter limitation. Is there any idea? I'm writing code in c and c++
--------------------- code : this is an example code that im using.
vector<VectorXi> Test;
VectorXi a0(2); a0[0] = 0; a0[1] = 1;
VectorXi a1(3); a1[0] = 0; a1[1] = 1; a1[2] = 2;
VectorXi a2(2); a2[0] = 0; a2[1] = 1;
VectorXi a3(4); a3[0] = 0; a3[1] = 1; a3[2] = 2; a3[3] = 3;
VectorXi a5(1); a5[0] = 0;
Test.push_back(a0);
Test.push_back(a1);
Test.push_back(a5);
Test.push_back(a2);
Test.push_back(a3);
VectorXi index(5);
for (int i = 0; i < 5; i++)
index[i] = 0;
int IndexTemp = Test.size()-1;
vector<VectorXi> result;
bool c = true;
while (c == true)
{
if (index[IndexTemp] < Test[IndexTemp].size()-1)
{
VectorXi T;
T.resize(Test.size());
for (int j = 0; j<Test.size(); j++)
{
T[j] = Test[j](index[j]);
}
result.push_back(T);
index[IndexTemp] ++;
}
else if (index[IndexTemp] == Test[IndexTemp].size()-1)
{
VectorXi T;
T.resize(Test.size());
for (int j = 0; j<Test.size(); j++)
{
T[j] = Test[j](index[j]);
}
result.push_back(T);
IndexTemp--;
if (IndexTemp < 0)
break;
index[IndexTemp] ++;
}
}
for (unsigned int i = 0; i < result.size(); i++)
{
cout << i << " : ";
for (unsigned int j = 0; j < result[i].size(); j++)
{
cout << result[i](j) << " ";
}
cout << endl;
}
It does not show all combinations now..
If I make code to work only to this example (Test.size() == 5) I just use for loop five times like :
for(Test[0].size())
for(Test[1].size())
for(Test[2].size())
for(Test[3].size())
for(Test[4].size())
cout << ~~~~~
Then it gives all combinations. However if the Test.size() increased, I cannot write all for loops manually.