Sunteți pe pagina 1din 3

Metoda de programare Backtracking

Backtracking e o tehnică de programare de găsire a soluțiilor unei probleme care


verifică anumite condiții date. Există probleme în care utilizarea metodei Backtracking e
indispensabilă, nefiind cunoscute alte metode de rezolvare a lor.

Metoda Backtracking se aplică problemelor în care soluția se poate reprezenta


sub forma unei stive, implementată ca vector. Vom nota cu v - vectorul stivă – soluția
finală.

Pentru fiecare problemă există anumite relații care trebuie satisfăcute între
elemente. Acestea se numesc condiții de validare.

O soluție e validă dacă și numai dacă sunt satisfăcute condițiile de validare.(de


continuitate)

O soluție e finală doar dacă nr de nivele k este egal cu nr. n al valorilor care
alcătuiesc soluția.

Va trebui să determinăm toate soluțiile finale.

Dezavantajul metodei Backtracking este acela că este mare consumatoare de


timp.

Ex. de problemă care se rezolvă cu metota Backtracking:

Să se genereze permutările de n elemente.

Pentru k=3, va trebui să afișăm:

Niv 3 k=3 3 1 2 1
3 2
Niv 2 k=2 2 3 1 3 1 2
1 1 2 2 3 3
Niv 1 k=1
Implementarea recursivă a metodei Backtracking

int n, v[20];
//Folosim funcția bktr care completează nivelul k din stivă:

void bktr(int k)
{int i;
for(i=1;i<=n;i++)
{v[k]=i;
if(valid(k))
if(final(k))
afisare(k);
else bktr(k+1);}
}
//functia principala main
int main()
{cin>>n;
bktr(1);
return 0;
}
// verificam conditiile de validitate
int valid(int k)
{int i;
for(i=1;i<=k-1;i++)
if(v[i]==v[k]) return 0;
return 1;
}
// verificam daca am obtinut o solutie finala
int final(int k)
{ if(k==n) return 1;
return 0;
}
// afisam solutia obtinuta
void afisare(int k)
{int i;
for(i=1;i<=k;i++) cout<<v[i]<<” ”;
cout<<endl;
}

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