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:
#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