Cod sursa(job #1974486)

Utilizator thinkphpAdrian Statescu thinkphp Data 27 aprilie 2017 20:03:03
Problema Generare de permutari Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include<fstream>

using namespace std;

ifstream fin ("permutari.in");
ofstream gout ("permutari.out");

int stack[100],
    level,
    is,
    hs, 
    n;

void bt();
void init();
int successor();
int valid();
int solution();
void print();

int main() {

    fin>>n;
    bt();  

    return(0);
};

void bt() {

     level = 1;
     init();
  
     while(level > 0) {
           
           hs = 1; is = 0;

           while(hs && !is) {

                 hs = successor();

                 if(hs) is = valid();
           } 

           if(hs) {

              if(solution()) print(); 

                      else 
                             {level++;init();}
           } else level--;
     }

};

void init() {

     stack[ level ] = 0;
};

int successor() {

    if(stack[level] < n) {

       stack[level] = stack[level] + 1;

       return 1;

    } else {

       return 0;
    }    
};

int valid() {

    int i;

    for(i = 1; i < level; i++) {

        if(stack[i] == stack[level]) return 0;
    } 

    return 1; 
};

int solution() {

    return level == n;
};

void print() {

     int i;

     for(i = 1; i <= n; i++) gout<<stack[i]<<" ";

     printf("\n");
};