Cod sursa(job #2376317)

Utilizator Tibitiberiu2Tiberiu Tibitiberiu2 Data 8 martie 2019 14:50:50
Problema Generare de permutari Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>

int n, v[30];
using namespace std;
ifstream fin("permutari.in");
ofstream fout("permutari.out");
void init(int v[30], int k){
    v[k] = 0;
}
void succesor(int v[30], int k, int &as){
    if(v[k] < n){
        v[k]++;
        as=1;
    }
    else as = 0;
}
void validare(int v[30], int k, int &ev){
    ev = 1;
    for(int i=1;i<k;i++){
        if(v[k]==v[i]){
            ev = 0;
            break;
        }
    }
}
bool solutie(int k){
    if(n==k) return true;
    else return false;
}
void afisare(int v[30], int k){
    for(int i=1;i<=k;i++) fout << v[i] << " ";
    cout << endl;
}
void backtracking(int n){
   int k=1;
    init(v,k);
    while(k>0){
        int as, ev;
        do{ succesor(v,k, as);
            if(as)validare(v,k,ev);
        } while(as&&!ev);
        if(as){
            if(solutie(k)){
                afisare(v,k);
            }
            else{
                k++;
                init(v,k);
            }
        } else k--;
    }
}
int main()
{
    fin >> n;
    backtracking(n);
    fin.close();
    fout.close();
    return 0;
}