Cod sursa(job #616844)

Utilizator ContraPunctContrapunct ContraPunct Data 13 octombrie 2011 15:21:54
Problema Combinari Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<cstdio>
/*

Sa se genereze toate combinarile de N luate cate K in ordine lexicografica.
Date de intrare

Fisierul de intrare combinari.in contine pe prima linie numerele naturale N si K.
Date de iesire

In fisierul de iesire combinari.out va contine toate combinarile de N luate cate K, fiecare pe o linie noua.
Restrictii

    * 1 ≤ N ≤ 18
    * 1 ≤ K ≤ N
    * Intr-o combinare numerele trebuie scrise in ordine crescatoare

*/
int N,K, viz[19],st[1000];
FILE *f,*g;
void ReadData()
{
	  fscanf(f,"%d %d",&N,&K);
}

void WriteData ( )
{
    int i;
    for( i=1;i<=K;i++)
    {
        fprintf(g,"%d ",st[i]);
    }
    fprintf(g,"\n");
}

void Back(int top)
{
    int i;
    if(top == K+1)
    {
        WriteData();
        return;
    }
    for ( i = 1; i<= N; i++ )
    {
        if(viz[i] == 0) 
        {
            viz[i] = 1;
            st[top] = i;
            Back(top+1); 
            viz[i] = 0;
        }
    }
}


int main()
{
    f = fopen("combinari.in","r");
    g = fopen("combinari.out","w");
    ReadData();
    Back(1);
    //printf("\n%d %d lalallala\n",N,K);
    return 0;
}