Cod sursa(job #145508)

Utilizator alecmanAchim Ioan Alexandru alecman Data 28 februarie 2008 21:31:21
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#include<stdio.h>

#define INPUT "permutari.in"
#define OUTPUT "permutari.out"

FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");

int stiva[10],n,k;

inline void readValues(){fscanf(fin, "%d", &n);}

void solveFunction();

inline void init(){stiva[k]=0;}

int succesor();

int valid();

int solutie();

void printSolution();

int main(){
  readValues();
  solveFunction();
  fclose(fin);
  fclose(fout);
  return 0;
}

void solveFunction(){
  k=1;
  init();
  int as,ev,l=1;
  while(k>=1){
    l=1;
    do{
      as=succesor();
      if(as) ev=valid();
      if((as&&ev)||(!as))
	l=0;
    }while(l);
    if(as){
      if(solutie())
      {
        printSolution();
      }
      else{
        ++k;
	init();
      }
    }
    else
      --k;
  }
}

int succesor(){
  if(stiva[k]<n)
  {
    ++stiva[k];
    return 1;
  }
  return 0;
}

int valid(){
  for(int i=1;i<k;++i)
    if(stiva[i]==stiva[k])
      return 0;
  return 1;
}

int solutie(){
  if(k==n)
    return 1;
  return 0;
}

void printSolution(){
  for(int i=1;i<=n;++i)
    fprintf(fout, "%d ", stiva[i]);
  fprintf(fout, "\n");
}