Pagini recente » Cod sursa (job #403728) | Cod sursa (job #2596476) | Cod sursa (job #1610087) | Cod sursa (job #726840) | Cod sursa (job #187024)
Cod sursa(job #187024)
#include <stdio.h>
//#define debug
int n,k,D,stiva[2000000];
void date(){
int i,j;
freopen ("combin.in","r",stdin);
scanf ("%d",&n);//printf("n=%d\n",n);
scanf ("%d",&k);//printf("k=%d\n",k);
}
void afisare(){
int i;
#ifdef debug
printf("AFISEZ:\n");
#endif
for(i=1;i<=k;i++)printf("%d ",stiva[i]);
printf("\n");
}
void bktr(){
int i,j,loc=k;//stiva va incepe de la 1
//initializez stiva cu prima combinare
for(i=1;i<=k;i++)stiva[i]=i;
afisare();
//incep sa fac bktr
while(loc>0){
#ifdef debug
printf("Sunt in while, locul in stiva este %d\n",loc);
#endif
stiva[loc]++;
if((stiva[loc]<=n)&&(loc<=k)){
if(loc==k)afisare();
else {loc++;stiva[loc]=stiva[loc-1];//printf("Totul e ok!Trebuie sa continuu sa umpla stiva, sunt abia pe locul %d\n",loc);
#ifdef debug
printf("Apropo, am pus in stiva valoarea %d pe locul %d\n",stiva[loc],loc);
#endif
}
}else {loc--;
#ifdef debug
printf("Am scazut locul;o valoare era prea mare sau am iesit dint stiva! loc=%d\n",loc);
#endif
}
}
}
int main(){
int i,j,lungime=0;
freopen("combin.out","w",stdout);
date();
stiva[0]=0;
bktr();
return 0;
}