Noțiunea de backtracking se referă la utilizarea unui algoritm recursiv pentru soluționarea unei probleme ce admite soluții parțiale. Se începe cu una din bucățile de soluție disponibile și se avansează până la construirea soluției complete. Dacă una din rutele de construcție disponibile nu duce nicăieri, se merge înapoi (backtrack) și se încearcă altă cale. Dacă niciuna din rute nu dă o soluție, atunci problema nu este rezolvabilă.
Algoritmul generat este următorul:
Dată fiind o matrice 2D de caractere, să se verifice dacă există un cuvânt în matrice. Dacă da,să i se afișeze calea. Se permite mișcarea în toate cele 8 direcții.
Procedeu:
Mai jos este matricea de soluții pentru căutarea cuvântului „horizon“ în cea de mai sus.
Se notează cu 0 celulele neutilizate.
Fiind dar un și de caractere și un dicționar de cuvinte, să se verifice dacă șirul poate fi spart în cuvinte din dicționar și ,dacă da, să se afișeze acestea cu spațiu între ele.
Procedeu naiv:
Procedeu cu programare dinamică:
Pentru acest laborator puteți descărca scheletul de cod de aici. Descărcați arhiva și dezarhivați-o.
Puteti folosi utilitarul wget
pentru descarcare si utilitarul unzip
pentru dezarhivare.
wget http://elf.cs.pub.ro/sda-ab/wiki/_media/laboratoare/lab12_backtracking-skel.zip
unzip lab12_backtracking-skel.zip
Pentru compilare folositi comanda make
.