#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
void getPermutations(int index, vector<int> output, vector< vector<int> > &solutions, vector<int> boxes)
{
if (index == output.size())
{
solutions.push_back(output);
return;
}
vector<int>::iterator it;
for (it = boxes.begin(); it != boxes.end(); it ++)
{
#ifdef _DEBUG
printf("index= %d\n",index);
printf("*it= %d",*it);
#endif
output[index] = (*it);
getPermutations(index+1,output,solutions, boxes);
}
}
int main()
{
vector< vector<int> > solutions;
int nbval=2; // 0 1 ... n
vector<int> boxes;
for (int i=0; i<nbval; i++)
boxes.push_back(i);
int nbs = 4;
vector<int> outvec;
outvec.assign(nbs,0);
// recursive call
getPermutations(0, outvec, solutions, boxes);
// print solutions
for (int i=0; i<solutions.size();i++)
{
cout << endl;
for(int j =0;j<solutions[i].size();j++)
cout << solutions[i][j] << " " ;
}
printf("\n\nNumber of permutations with repetitions = %d\n\n",solutions.size());
//system("pause");
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdm9pZCBnZXRQZXJtdXRhdGlvbnMoaW50IGluZGV4LCB2ZWN0b3I8aW50PiBvdXRwdXQsIHZlY3RvcjwgdmVjdG9yPGludD4gPiAmc29sdXRpb25zLCB2ZWN0b3I8aW50PiBib3hlcykKewoJaWYgKGluZGV4ID09IG91dHB1dC5zaXplKCkpCgl7CgkJc29sdXRpb25zLnB1c2hfYmFjayhvdXRwdXQpOwoJCXJldHVybjsKCX0KCXZlY3RvcjxpbnQ+OjppdGVyYXRvciBpdDsKCWZvciAoaXQgPSBib3hlcy5iZWdpbigpOyBpdCAhPSBib3hlcy5lbmQoKTsgaXQgKyspCgl7CiNpZmRlZiBfREVCVUcKCQlwcmludGYoImluZGV4PSAlZFxuIixpbmRleCk7CgkJcHJpbnRmKCIqaXQ9ICVkIiwqaXQpOwojZW5kaWYJCQkKCQlvdXRwdXRbaW5kZXhdID0gKCppdCk7CgkJZ2V0UGVybXV0YXRpb25zKGluZGV4KzEsb3V0cHV0LHNvbHV0aW9ucywgYm94ZXMpOwoJfQoKfQoKaW50IG1haW4oKQp7CgkKCXZlY3RvcjwgdmVjdG9yPGludD4gPiBzb2x1dGlvbnM7CgoJaW50IG5idmFsPTI7IC8vIDAgIDEgLi4uIG4gCgl2ZWN0b3I8aW50PiBib3hlczsKCWZvciAoaW50IGk9MDsgaTxuYnZhbDsgaSsrKSAKCQlib3hlcy5wdXNoX2JhY2soaSk7CgkKCWludCBuYnMgPSA0OwoJdmVjdG9yPGludD4gb3V0dmVjOwoJb3V0dmVjLmFzc2lnbihuYnMsMCk7CgoJLy8gcmVjdXJzaXZlIGNhbGwKCWdldFBlcm11dGF0aW9ucygwLCBvdXR2ZWMsIHNvbHV0aW9ucywgYm94ZXMpOwoKCS8vIHByaW50IHNvbHV0aW9ucwoJZm9yIChpbnQgaT0wOyBpPHNvbHV0aW9ucy5zaXplKCk7aSsrKQoJewoJCWNvdXQgPDwgZW5kbDsKCQlmb3IoaW50IGogPTA7ajxzb2x1dGlvbnNbaV0uc2l6ZSgpO2orKykKCQkJY291dCA8PCBzb2x1dGlvbnNbaV1bal0gPDwgIiAgIiA7Cgl9CgkKCXByaW50ZigiXG5cbk51bWJlciBvZiBwZXJtdXRhdGlvbnMgd2l0aCByZXBldGl0aW9ucyA9ICVkXG5cbiIsc29sdXRpb25zLnNpemUoKSk7CgoJLy9zeXN0ZW0oInBhdXNlIik7CglyZXR1cm4gMDsKfQo=