Cod sursa(job #2695248)

Utilizator mircea_007Mircea Rebengiuc mircea_007 Data 12 ianuarie 2021 11:41:11
Problema Generare de permutari Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <stdio.h>

#define MAXN 8
#define MAXOUT (MAXN * 2 + 2)
#define NIL -1

int next[1 + MAXN];// elem 0 e santinela
char out[MAXOUT];// stiva..
int last;

FILE *fin, *fout;

void perm(){
  int i, aux;

  if( next[0] == NIL ){
    out[last++] = '\n';
    out[last++] = '\0';
    fputs(out, fout);
    last -= 2;
  }else{
    i = 0;
    while( next[i] != NIL ){
      out[last++] = '0' + (aux = next[i]);// adaugam la stiva
      out[last++] = ' ';

      next[i] = next[next[i]];// scoatem elem. din lista
      perm();
      next[i] = aux;// adaugam inapoi

      last -= 2;// scoatem din lista
      i = next[i];// trecem la urm. elem
    }
  }
}

int main(){
  fin  = fopen("permutari.in",  "r");
  fout = fopen("permutari.out", "w");

  int n, i;

  fscanf(fin, "%d", &n);

  for( i = 0 ; i < n ; i++ )
    next[i] = i + 1;
  next[n] = NIL;
  last = 0;

  perm();

  fclose(fin);
  fclose(fout);
  return 0;
}