Cod sursa(job #216097)

Utilizator stocarulCosmin-Mihai Tutunaru stocarul Data 22 octombrie 2008 20:01:40
Problema Generare de permutari Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.08 kb
#include<stdio.h>
#define nmax 10
int v[nmax],x[nmax],viz[nmax];
int i,n;

void permutari(int v[], int x[], int viz[], int n, int k)
	{
	int i;
	if(k>n) //avem o noua permutare completa
		{
		for(i=1;i<=n;i++)
			printf("%d ",x[i]); //afisem permutarea
		printf("\n"); //afisem ecaracterul pt rand nou, deoarece s-a terminat afisarea permutarii
		}
	else //Permutarea nu este completa, deci adaugam un nou element
		for(i=1;i<=n;i++) //Luam toate elementele care trebuie permutate
			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
				permutari(v,x,viz,n,k+1); //Apelam functia pentru pozitia urmatoare din permutare
				viz[i]=0; //Scoatem din viz pozitia i
				}
	}

int main()
{
freopen("permutari.in","r",stdin);
freopen("permutari.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++) v[i]=i;
permutari(v,x,viz,n,1); //Apelam functia pentru generare de permutari
fclose(stdin);
fclose(stdout);
}