#include <stdio.h>
void printSubset(int subset[], int size) {
printf("[");
for (int i = 0; i < size; i++) {
printf("%d", subset[i]);
if (i < size - 1) printf(", ");
}
printf("]\n");
}
void backtrack(int set[], int n, int index, int subset[], int subsetSize) {
if (index == n) {
printSubset(subset, subsetSize); // print current subset
return;
}
// Include current element
subset[subsetSize] = set[index];
backtrack(set, n, index + 1, subset, subsetSize + 1); // move forward with element included
// Exclude current element
backtrack(set, n, index + 1, subset, subsetSize); // move forward without element
}
int main() {
int set[] = {1, 2};
int n = sizeof(set) / sizeof(set[0]);
int subset[n];
backtrack(set, n, 0, subset, 0);
return 0;
}if (index == n) { printSubset(subset, subsetSize); return; }
stop when all elements considered, print current subset
subset[subsetSize] = set[index]; backtrack(set, n, index + 1, subset, subsetSize + 1);
include current element and recurse
backtrack(set, n, index + 1, subset, subsetSize);
exclude current element and recurse