Cod sursa(job #1974498)

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

using namespace std;

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

class Perm {
 
public:
       Perm(int N): n(N), stack(n+1){};

void bt() {

     int hs;

     level = 1;

     init();
  
     while(level > 0) {
           
           do{}while((hs=successor()) && !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]<<" ";

     gout<<endl;
};

       void gen() {
            bt();
       };

private:
vector<int> stack;
int n, level;

};

int main() {
    int n; 
    fin>>n;
    Perm p = Perm(n);
         p.gen();

    return(0);
};