Cod sursa(job #187024)

Utilizator blue_phoenixPosea Elena blue_phoenix Data 29 aprilie 2008 23:20:08
Problema Combinari Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#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;
}