Sunteți pe pagina 1din 5

GENERARE PERMUTARI RECURSIV

#include <iostream>
using namespace std;
int st[10],n;
int solutie(int k)
{
    if(k==n)
        return 1;
    else
        return 0;
}
int valid(int k)
{
    int i;
    for(i=1; i<k; i++)
        if(st[i]==st[k])
            return 0;
        else
            return 1;
}
void tipar(int k)
{
    int i;
    for(i=1; i<=k; i++)
        cout<<st[i];
    cout<<endl;
// afișare/prelucrare soluția finală curentă
}
void Back(int k) // la fiecare apel BACK(k) se generează valori pentru elementul st[k] al
vectorului soluție;
{
    for(int i=1 ; i<=n; ++i)// pentru fiecare element i din A[k] (ia pe rand elementele multimii de
valori posibile)
  {
        st[k]=i;
        if( valid(k)==1 )
            if(solutie(k))
                tipar(k);
            else
                Back(k+1);//autoapel de subprogram (pasul inapoi, coborarea in stiva se face prin
revenirea din recursivitate)

  }
}
int main()
{
    //citire date de intrare
    cin>>n;
    Back(1);//apel de subprogram recursiv, pentru primul nivel din stiva
    return 0;
}

GENERARE ARANJAMENTE RECURSIV


#include <iostream>
using namespace std;
int st[10],n,p;
int solutie(int k)
{
    if(k==p)
        return 1;
    else
        return 0;
}
int valid(int k)
{
    int i;
    for(i=1; i<k; i++)
        if(st[i]==st[k])
            return 0;
        else
            return 1;
}
void tipar(int k)
{
    int i;
    for(i=1; i<=k; i++)
        cout<<st[i];
    cout<<endl;
// afișare/prelucrare soluția finală curentă
}
void Back(int k) // la fiecare apel BACK(k) se generează valori pentru elementul st[k] al
vectorului soluție;
{
    for(int i=1 ; i<=n; ++i)// pentru fiecare element i din A[k] (ia pe rand elementele multimii de
valori posibile)
  {
        st[k]=i;
        if( valid(k)==1 )
            if(solutie(k))
                tipar(k);
            else
                Back(k+1);//autoapel de subprogram (pasul inapoi, coborarea in stiva se face prin
revenirea din recursivitate)

  }
}
int main()
{
    //citire date de intrare
    cin>>n;
    cin>>p;
    Back(1);//apel de subprogram recursiv, pentru primul nivel din stiva
    return 0;
}

GENERARE COMBINARI RECURSIV


#include <iostream>
using namespace std;
int st[10], n, p;
void tipar(int k)
{
    for(int j=1; j<=k; j++)
        cout<<st[j]<<" ";
    cout<<endl;
}

bool valid(int k)
{
    for(int i=1; i<k; ++i)
        if(st[k]==st[i])
            return false;
    if(k>1)
        if(st[k]<=st[k-1])
            return false;
    return true;
}

bool solutie(int k)
{
    return k==p;
}

void Back(int k)
{
    for(int i=1; i<=n; ++i)
    {
        st[k]=i;
        if(valid(k))
            if(solutie(k))
                tipar(k);
            else
                Back(k+1);
    }
}
int main()
{
    cin>>n>>p;
    Back(1);
    return 0;
}

GENERARE SUBMULTIMI RECURSIV


#include<iostream>
using namespace std;
int st[10],n;
void tipar(int k)
{
    for(int i=1; i<=k; ++i)
        cout<<st[i]<<" ";
    cout << endl;
}
bool valid(int k)
{
    if(k==1)
        return true;
    if(st[k]>st[k-1])
        return true;
    return false;
}
void Back(int k)
{
    for(int i=1; i<=n; ++i)
    {
        st[k]=i;
        if(valid(k))
        {
            tipar(k);
            Back(k+1);
        }
    }
}
int main()
{
    cin>>n;
    Back(1);
    return 0;
}

S-ar putea să vă placă și