Cod sursa(job #856845)

Utilizator I.AlexandruIlie Alexandru I.Alexandru Data 16 ianuarie 2013 23:50:33
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.43 kb
#include<stdio.h>

class Permutari {
    int n, *x, k;
    
    int min() {
        return 1;    
    }
    
    int max() {
        return n;    
    }
    
    bool continuare() {
        for(int i=0; i<k; i++) {
            if(x[k]==x[i]) {
                return false;
            }
        }
        return true;
    }
    
    bool solutie() {
        return (k==n-1);    
    }
    
    void afisare() {
        for(int i=0; i<=k; i++) {
            printf("%d ", x[i]);
        }
        printf("\n");
    }
    
    public:
        
    void back() {
        k=0;
        x[0]=min()-1;
        
        while(k>=0) {
            x[k]++;
            
            if(x[k]>max()) {
                k--;
            }
            else {
                if(continuare()) {
                    if(solutie()) {
                        afisare();
                    }
                    else {
                        x[++k]=min()-1;    
                    }
                }        
            }    
        }        
    }
    
    
    Permutari(int n) {
        this->n=n;
        x=new int[n];
    }
    
    ~Permutari() {
        delete[] x;    
    }
};

int main(int argc, char **argv) {
    freopen("permutari.in", "r", stdin);
    freopen("permutari.out", "w", stdout);
    
    int n;
    scanf("%d", &n); 
    
    Permutari p(n);
    p.back();
    return 0;    
}