Cod sursa(job #216277)

Utilizator stocarulCosmin-Mihai Tutunaru stocarul Data 23 octombrie 2008 19:29:04
Problema Combinari Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.14 kb
#include<stdio.h>
#define nmax 101
int v[nmax],x[nmax];
char viz[nmax];
int i,n,m;

void combinari(int v[], int x[], char viz[], int n, int m, int k, int poz)
	{
	int i;
	if(k>m) //avem o noua combinatie completa
		{
		for(i=1;i<=m;i++)
			printf("%d ",x[i]); //afisem combinatia
		printf("\n"); //afisem ecaracterul pt rand nou, deoarece s-a terminat afisarea combinatiei
		}
	else //Permutarea nu este completa, deci adaugam un nou element
		for(i=poz+1;i<=n-m+k;i++) //Luam toate elementele care trebuie permutate pentru a obtine o noua combinatie
			if(!viz[i]) //Daca elementul nu a fost folosit in aceasta permutare
				{
				viz[i]=1; //Marcam ca elementul de la pozitia i a fost luat in aceasta permutare
				x[k]=v[i]; //Punem in vector noul element al permutarii
				combinari(v,x,viz,n,m,k+1,i); //Apelam functia pentru pozitia urmatoare din permutare
				viz[i]=0; //Scoatem din viz pozitia i
				}
	}

int main()
{
freopen("combinari.in","r",stdin);
freopen("combinari.out","w",stdout);

scanf("%d %d",&n,&m);

for(i=1;i<=n;v[i]=i++);

combinari(v,x,viz,n,m,1,0);

fclose(stdin);
fclose(stdout);

return 0;
}