Pagini recente » Cod sursa (job #103047) | Cod sursa (job #1524656) | Cod sursa (job #750735) | Cod sursa (job #1719187) | Cod sursa (job #216097)
Cod sursa(job #216097)
#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);
}