Cod sursa(job #990951)
#include <cstdio>
int x[20], n;
// genereaza cu back toate sirurile binare
//adica sa generez sirurile binare? daca n = 3 trebuie sa generezi
// 000
// 001ok
void afis() {
// afiseaza submultimea, x[i] = 1 => afisezi i
// vezi sa nu afisezi si multimea vida
int i;
for(i = 1;i <= n; ++i)
if(x[i])printf("%d ",i);
printf("\n");
}
void back(int k){
if(k == n + 1)
afis();
else {
// ce valori poti pune pe x[k] ?
// 0 1
for (int i = 0; i <= 1; ++i)
x[k] = i,
back(k + 1);
// sau poti pune x[k] = 0; back(k + 1); x[k] = 1; back(k + 1);
//prefer varianta mai scurta :D
// nu cred ca e vreuna mai scurta...
//ok
}
}
int main(){
freopen("submultimi.in","r",stdin);
freopen("submultimi.out","w",stdout);
scanf("%d ",&n);
back(1);
}