Cod sursa(job #246908)

Utilizator zalmanDanci Emanuel Sebastian zalman Data 21 ianuarie 2009 20:25:36
Problema Generare de permutari Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#define fin "permutari.in"
#define fout "permutari.out"
#define line printf("\n")
#define FOR(a,b) for( int i=a; i<=b; i++)
#define dim 10
int sw, n , x[dim];

void swap (int &first , int &second);
void generator(void);
void print(void);

int main(void)
{
 freopen(fin,"r",stdin);
 freopen(fout,"w",stdout);
 scanf("%d", &n);

 FOR(0,n-1)
  x[i]=i+1;
 print();

 sw = 0;
 while( !sw )
 {
  generator();
  if(!sw)
  print();
 }

  line;
  fcloseall();
  return 0;
}

void swap(int &first, int &second)
{
 int aux;
 aux = first;
 first = second;
 second = aux;
}

void generator()
{
 if( !sw )
 {
  for ( int i=n-2; i>=0 && x[i] > x[i+1]; i--);
   if( i < 0 )
    sw = 1;
    else
     {
      for (int j= n-1; x[i] > x[j]; j--);
      swap(x[i], x[j]);
      for( j = 1; j <= (n-i)/2; j++)
       swap(x[i+j], x[n-j]);
     }
 }
}
void print()
{

 FOR(0,n-1)
  printf("%d ",x[i]);

  line;
}