Cod sursa(job #820133)

Utilizator crisjonycristi crisjony Data 20 noiembrie 2012 09:10:50
Problema Generare de permutari Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
//generarea permutarilor in ordine lexicografica
FILE *fin,*fout;

int p[100],n,i,k,poz,min,j;

int main()
{
    fin=fopen("perm.in","r");
    fout=fopen("perm.out","w");
    fscanf(fin,"%d",&n);
    for(i=1;i<=n;i++)
        p[i]=i;
    do
    {
        poz=n;
        while((p[poz]<p[poz-1]) && (poz>1))
            poz--;
        if(poz)
        {
            min=p[poz+1]; j=poz+1;
            for(i=poz+1;i<=n;i++)
                if(min>p[i] && p[i]>p[poz])
                {
                    min=p[i];
                    j=i;
                }
            k=p[poz];p[poz]=p[j];p[j]=k;
            for(i=1;i<=(n-poz)/2;i++)
            {
                k=p[poz+i];
                p[poz+i]=p[n-i+1];
                p[n-i+1]=k;
                for(i=1;i<=n;i++)
                {
                    fprintf(fout,"%d ",p[i]);
                }
                fprintf(fout,"\n");
            }
        }
    }while(poz);
    fclose(fout);
    return 0;
}