C/C++: Tehnica backtraking

Postat în C/C++, Probleme , pe data 10 November 2008

Metoda backtracking foloseşte la rezolvarea multor probleme. Pentru ca o problemă să poată să fie rezolvată cu metoda backtracking, ea trebuie să îndeplinească simultan următoarele condiţii:

- poate avea mai multe soluţii, acestea fiind puse sub formă de vector ca de exemplu S(x1,x2,x3,…xn), unde x1ЄA1, x2ЄA2,…, xnЄAn

- mulţimile A1, A2, A3, …, An sunt mulţimi finite, având elementele aflate într-o ordine bine stabilită, ele putând să fie chiar identice.

În acest caz, vectorul care conţine soluţii se numeşte stivă.
Se alege primul element x1 din A1. Se repetă într-o structură repetitivă până când nu mai există elemente netestate din mulţimea A1;

- se presupune că am ajuns la elementul xk din mulţimea Ak şi se doreşte găsirea unui element xk+1 din mulţimea Ak+1. Acesta trebuie să îndeplinească condiţiile de existenţă a unui astfel de element, impuse de problemă, iar dacă:

- îndeplineşte aceste condiţii atunci trebuie să îndeplinească alte condiţii impuse de problemă, prin care se determină dacă el ar putea face parte din soluţie. Dacă: (1)da, atunci se testează dacă şirul de elemente este o soluţie a problemei; dacă: (2) da, atunci se tipăreşte vectorul care conţine aceste soluţii; (2) nu, atunci se trece pe următorul nivel din şir (k:=k+1); (1) nu, nu îndeplineşte condiţiile de a face parte din soluţie, atunci se trece la următorul element netestat din mulţimea Ak; nu mai poate exista un element pe nivelul k, atunci se trece la nivelul anterior şi se încearcă aici găsirea unui element; repetiţia se termină când am ajuns pe nivelul 0.

Un exemplu de problemă ce foloseşte tehnica backtraking este Problema Labirintului

Comentarii (1)

Lasă un comentariu, un sfat sau o întrebare: