Informatică, întrebare adresată de Asubossu6396, 8 ani în urmă

Sa se afiseze toate modurile de aranjare a elementelor unui sir dat de numere intregi, astfel incat in sirul rezultat sa nu existe 2 elemente alaturate negative


rezolvare prin metoda backtracking. Am nevoie urgenta de rezolvare!!.

Răspunsuri la întrebare

Răspuns de Daci32
0

Răspuns:

#include <iostream>

using namespace std;

int n,v[20],sol[20];

void afis()

{

   for(int j=1;j<=n;j++)

   {

       cout<<sol[j]<<' ';

   }

   cout<<'\n';

}

bool ok(int i)

{

   if(i==1) return true;

   if(sol[i]<0 and sol[i-1]<0) return false;

   for(int j=1;j<i;j++)

   {

       if(sol[i]==sol[j]) return false;

   }

   return true;

}

void bkt(int i)

{

   for(int j=1;j<=n;j++)

   {

       sol[i]=v[j];

       if(ok(i))

       {

           if(i==n) afis();

           else bkt(i+1);

       }

   }

}

int main()

{

   cin>>n;

   for(int i=1;i<=n;i++)

       cin>>v[i];

   bkt(1);

   return 0;

}

Explicație:

afis - functie de afisare a solutiilor

ok - functie care testeaza daca elementele solutiei gasite sunt bune

bkt - functia propriu-zisa de backtracking care aseaza elementele in vectorul solutie

Alte întrebări interesante