Sunteți pe pagina 1din 31

Backtracking

Conf. dr. Smaranda Belciug


sbelciug@inf.ucv.ro
Obiective
—  Intelegerea modalitatii de folosire a backtracking-ului ca
strategie de rezolvare a problemelor
—  Recunoasterea problemelor ce pot fi rezolvate cu
backtracking
—  Intelegerea modului in care se aplica recursivitatea in

backtracking
—  Abilitatea de a implementa recursivitatea in probleme de

backtracking
Backtracking
Problema labirintului
Regula mainii drepte
—  Pune mana dreapta pe perete
—  Atat timp cat nu ai iesit din labirint {
—  Mergi tinand mana dreapta pe zid
—  }

Strategie
Iterativa!!
Abordare recursiva
Identificarea
cazurilor simple

Ne aflam
inafara Dead end
labirintului

- Daca sunt inafara labirintului – am rezolvat problema


- - Daca sunt pe o casuta marcata – problema nu are solutie
Codarea problemei labirintului
—  Reprezentarea labirintului trebuie sa fie o structura de date

ce ne permite:
—  sa codam peretii

—  sa retinem pozitia curenta

—  sa ne indice daca un anumit loc este marcat

—  sa putem determina daca am iesit din labirint sau nu


Problema colorarii hartilor
—  Vrem coloram harta din imagine folosind backtracking

—  Scopul este de a folosi doar 4 culori, astfel incat oricare doua

tari vecine sa nu aiba aceeasi culoare

—  Vom considera statele in ordine alfabetica si vom folosi cele

patru culori in ordinea urmatoare: rosu, galben, verde si


albastru
—  Incepem prin apelarea metodei de colorare pentru a colora
Colorado
—  Aceasta metoda incepe cu o bucla for in care iteram lista cu culori
posibile (rosu, galben, verde, albastru).
—  Intai se verifica daca se poate colora cu rosu Colorado

—  Se poate deoarece niciun dintre vecini nu e colorat, deci Colorado


primeste rosu
—  Metoda se aplica apoi pentru Idaho

—  (in ordine alfabetica)


—  Ce culoare va primi?
—  Idaho va primi culoare rosie, deoarece niciunul dintre vecinii
sai e colorat cu rosu
—  Apoi metoda va apela Kansas

—  Ce culoare va primi?

—  Kansas e colorat cu galben

—  Metoda incearca mai intai rosu, dar nu poate deoarece este


culoarea lui Colorado, apoi incearca urmatoarea culoare din
lista, galben
—  Montana este colorata cu galben

—  Rosu nu merge deoarece Idaho e colorat cu rosu

—  Se continua apelul cu Nebraska

—  Ce culoare va primi?
—  Nebraska se coloreaza cu verde

—  Rosu nu merge, deoarece Colorado e colorat cu rosu. Galben

nu merge, deoarece Kansas e deja colorat cu galben. Verde


merge, deoarece niciun vecin nu este colorat cu verde

—  Se continua apelul cu North Dakota

—  Ce culoare va primi?
—  North Dakota este colorata cu rosu, deoarece niciun vecin nu

este colorat cu rosu

—  Se apeleaza South Dakota

—  Ce culoare va primi?

—  South Dakota este colorata cu albastru

—  Se apeleaza Utah

—  Ce culoare va primi?
—  Utah va fi colorat cu galben

—  Urmatorul apel va fi Wyoming

—  Ce culoare va primi?

—  Nicio culoare nu merge!!!!

—  Ce va face metoda in continuare??!?!?!


—  Va face un pas inapoi intorcandu-se la pasul dinaintea acestui

apel recursiv

—  Nu mai coloreaza cu galben Utah, alegand alta culoare

—  Ce culoare va alege?

—  Utah va fi colorat cu verde


—  Metoda incearca un nou apel pentru colorarea lui Wyoming

—  Ce culoare va primi?

—  Nicio culoare nu merge!!

—  Metoda face din nou backtracking..

—  Ce culoare va primi Utah?


—  Utah va fi colorat cu albastru

—  Urmeaza apelul recursiv pentru Wyoming

—  Ce culoare va primi?

—  Nicio culoare nu merge!!!!

—  Backtracking.. Utah a epuizat culorile..

—  Backtracking..
—  Metoda apeleaza South Dakota

—  Nu mai avem culori de incercat pentru South Dakota

—  Backtracking..

—  Metoda apeleaza North Dakota

—  Ce culoare va primi?
—  North Dakota este colorata cu verde

—  Apelam South Dakota

—  South Dakota este colorata cu rosu

—  Apelam Utah

—  Ce culoare va primi?
—  Utah este din nou colorat cu galben

—  Apelam Wyoming din nou..


—  Va merge oare de data aceasta?

—  Da!! Wyoming este colorat cu albastru!


Codarea problemei colorarii hartii
—  O matrice map[V][V] – unde V este numarul de tari

—  map[V][V] - matricea de adiacenta (1 daca tarile sunt vecine,

0 altfel)

—  Un integer m care reprezinta numarul de culori cu care se

poate colora harta

—  color[V] – vector cu culori asignate fiecarei tari


Tema
—  Rezolvati folosind metoda Backtracking un joc de tip

Sudoku.
Pe saptamana viitoare!

31

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