Pagini recente » Cod sursa (job #1589660) | Cod sursa (job #521275) | Cod sursa (job #2206653) | Cod sursa (job #970717) | Cod sursa (job #1782102)
#include <cstdio>
#define swap(a,b) a=a^b;b=a^b;a=a^b
int next_perm(int a[],int n)
{
int k=n-1;//k=indicele de "rupere" al permutarii <=> a[k]<a[k+1] shi de la
while(k&&a[k]>a[k+1])k--;//a[k+1] incolo sunt toate descrescatoare
if(!k)return 0;
//determin l=indicele celui mai mic dintre elem. de dupa a[k] mai mare dekt a[k]
int l=n,s,d;
while(a[k]>a[l])l--;
swap(a[k],a[l]);
s=k+1;d=n;
while(s<d)
{
swap(a[s],a[d]);
s++;d--;
}
return 1;
}
int main()
{
int a[20],n,i;
FILE *f=fopen("permutari.in","r");
fscanf(f,"%d",&n);fclose(f);
f=fopen("permutari.out","w");
for(i=1;i<=n;i++)a[i]=i;
do
{
for(i=1;i<=n;i++)
fprintf(f,"%d ",a[i]);
fprintf(f,"\n");
}while(next_perm(a,n));
return 0;
}