Cod sursa(job #146996)

Utilizator vlad_olteanVladimir Oltean vlad_oltean Data 2 martie 2008 14:51:05
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<stdio.h>
using namespace std;

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

void afis()
{   for(int i=1;i<=n;i++)
         printf("%ld ", p[i]);  
    printf("\n");
}

void next()
{   int aux;

    for(i=n-1;i&&p[i]>p[i+1];i--);
    if(!i) return;  // Nu mai exista succesor
    else
    {    for(j=n;p[j]<p[i];j--);  // Afla cel mai mic element mai mare decat p[i]
         aux=p[j], p[j]=p[i], p[i]=aux;  // p[i] se interschimba cu p[j]
         for(j=i+1, k=n ; j<k; j++,k--)  // inverseaza elementele de la i+1 la n
              aux=p[j], p[j]=p[k], p[k]=aux;
         afis();
         next();
    }
}
         
int main()
{    
     freopen("permutari.in", "r", stdin);  
     freopen("permutari.out", "w", stdout);  
     scanf("%ld", &n);  
     
     for(i=1;i<=n;i++) p[i]=i;
     afis();
     next();
     return 0;
}