#include <stdio.h>
void printSolution(int* array, int* solution, int size)
{
for(int i = 0; i < size; i++)
{
for(int j = 0; j < size; j++)
{
if(solution[j] == i + 1)
{
}
}
}
}
void printPartitions(int* array, int* solution, int size, int step, int maximum)
{
if(step == size) // no partitions left
{
printSolution(array, solution, size);
}
else
{
for(solution[step] = 1; solution[step] <= maximum; ++solution[step])
{
printPartitions(array, solution, size, step + 1, maximum);
}
printPartitions(array, solution, size, step + 1, maximum + 1);
}
}
int main(int argc, char const *argv[])
{
int array[] = {1, 2, 3, 4};
int solution[4];
printPartitions(array, solution, 4, 0, 0);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lkIHByaW50U29sdXRpb24oaW50KiBhcnJheSwgaW50KiBzb2x1dGlvbiwgaW50IHNpemUpCnsKCWZvcihpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCgl7CgkJcHJpbnRmKCJ7ICIpOwoJCWZvcihpbnQgaiA9IDA7IGogPCBzaXplOyBqKyspCgkJewoJCQlpZihzb2x1dGlvbltqXSA9PSBpICsgMSkKCQkJewoJCQkJcHJpbnRmKCIlZCAiLCBhcnJheVtqXSk7CgkJCX0KCQl9CgkJcHJpbnRmKCJ9ICIpOwoJfQoJcHJpbnRmKCJcbiIpOwp9CgoKdm9pZCBwcmludFBhcnRpdGlvbnMoaW50KiBhcnJheSwgaW50KiBzb2x1dGlvbiwgaW50IHNpemUsIGludCBzdGVwLCBpbnQgbWF4aW11bSkKewoJaWYoc3RlcCA9PSBzaXplKSAvLyBubyBwYXJ0aXRpb25zIGxlZnQKCXsKCQlwcmludFNvbHV0aW9uKGFycmF5LCBzb2x1dGlvbiwgc2l6ZSk7Cgl9CgllbHNlCgl7CiAgICAgICAgZm9yKHNvbHV0aW9uW3N0ZXBdID0gMTsgc29sdXRpb25bc3RlcF0gPD0gbWF4aW11bTsgKytzb2x1dGlvbltzdGVwXSkKICAgIAl7CgkgICAgICAgIHByaW50UGFydGl0aW9ucyhhcnJheSwgc29sdXRpb24sIHNpemUsIHN0ZXAgKyAxLCBtYXhpbXVtKTsKCSAgICB9CgkgICAgcHJpbnRQYXJ0aXRpb25zKGFycmF5LCBzb2x1dGlvbiwgc2l6ZSwgc3RlcCArIDEsIG1heGltdW0gKyAxKTsKCX0KfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgY29uc3QgKmFyZ3ZbXSkKewoJaW50IGFycmF5W10gPSB7MSwgMiwgMywgNH07CglpbnQgc29sdXRpb25bNF07CgoJcHJpbnRQYXJ0aXRpb25zKGFycmF5LCBzb2x1dGlvbiwgNCwgMCwgMCk7CgoJcmV0dXJuIDA7Cn0=