Cod sursa(job #2800897)

Utilizator petru-robuRobu Petru petru-robu Data 14 noiembrie 2021 12:56:46
Problema Generare de permutari Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <fstream>

using namespace std;

int Fibonacci(int k)//trebuie sa returneze al k-lea termen din sirul Fibonacci
{
    if(k==1 || k==2) return 1;
    return Fibonacci(k-1) + Fibonacci(k-2);
}

//ne propunem sa generam permutarile unei multimi cu n elemente

int st[10], top, n;
bool viz[10];

/*
    Semnificatia evctorului viz:
        daca elementul x este deja pus in stiva,
        atunci viz[x] = true
        altfel viz[x] = false
*/

ofstream fout("permutari.out");

void Afisare()
{
    int i;
    for(i=1;i<=n;++i)
        fout<<st[i]<<" ";
    fout<<"\n";
}

bool Verifica(int x, int top)
{
    return viz[x]==false;
}

void Back(int top)
{
    //top este nivelul la care vreau sa pun acum in stiva
    if(top==n+1)//deja stiva este plina, trebuie sa o afisez
        Afisare();
    else
    {
        for(int i=1;i<=n;++i)//la pozitia actuala (top) incerc sa
                             //pun fiecare valoare disponibila
            if(Verifica(i, top-1))
            {
                st[top] = i;//il pun pe i
                viz[i] = true;
                Back(top+1);//generez toate permutarile in care i este
                            //pus pe pozitia top
                viz[i] = false;//important
            }
    }
}

int main()
{
    ifstream fin("permutari.in");
    fin>>n;
    fin.close();

    Back(1);
    return 0;
}