Featured Post

Despre MAT(h)[ARCH(ive)].ro

MAT(h)[ARCH(ive)].ro este (momentan) un blog dedicat tuturor elevilor de liceu, care doresc perfectionarea sau aprofundarea materiei, la ...

Tuesday, November 26, 2019

(C++) CLASA A 11-A. SUBMULTIMI CU BACTRACKING (2 metode).

METODA 1

#include <iostream>

using namespace std;
int n,x[100];
void afisare (int x[ ],int n)
{
    cout<<"{";
    for (int i=1;i<=n;i++)
        if (i==n)
            cout<<x[i];
        else
            cout<<x[i]<<" ";
    cout<<"}";
    cout<<endl;
}
int verif (int k)
{
    if (k>1 && x[k]<=x[k-1])
        return 0;
    return 1;
}
void backt (int k)
{
    for (int i=1;i<=n;i++)
    {
        x[k]=i;
        if (verif (k))
        {
            afisare (x,k);
            backt (k+1);
        }
    }
}
int main()
{
    cin>>n;
    backt (1);
    return 0;
}

METODA 2

#include <iostream>

using namespace std;
int n,x[100],l;
void afisare (int x[ ],int n)
{
    cout<<"{";
    for (int i=1;i<=n;i++)
        if (i==n)
            cout<<x[n]<<"}";
        else
            cout<<x[i]<<" ";
    cout<<endl;
}
int verif (int k)
{
    if (k>1 && x[k]<=x[k-1])
        return 0;
}
void backt (int k,int l)
{
    for (int i=1;i<=n;i++)
    {
        x[k]=i;
        if (verif (k))
            if (k==l)
                afisare (x,l);
            else
                backt (k+1,l);
    }
}
int main()
{
    cin>>n;
    for (int l=1;l<=n;l++)
        backt (1,l);
    return 0;
}


No comments:

Post a Comment