Sunteți pe pagina 1din 21

Backtracking n plan

Teorie i aplica ii

Company

LOGO

Arhip Georgiana XI D CNVA

Cuprins

1. Backtracking 2.No iunea de backtracking n plan 3. Probleme clasice 4. Bibliografie

1. Backtracking
n variant elementar , metoda backtracking se aplic problemelor pentru care solu ia se poate reprezenta ca un vector x=(x1,x2,,xn). Fiecare componenta xi a vectorului poate lua valori intr-o anumita multime Si. Produsul cartezian S1xS2xxSn se numeste spatiul solutiilor posibile. Problemele care se rezolva prin backtracking nu impun generarea tuturor solutiilor posibile(generare exhaustiva), ci doar generarea acelor solutii care indeplinesc anumite conditii, specifice problemei, denumite conditii interne. Solutiile posibile care respecta conditiile interne sunt denumite solutii-rezultat. Unele probleme impun obtinerea unei singure solutii-rezultat, si anume cea care indeplineste o anumita conditie de optim. Aceasta este denumita solutie optima.

Pentru a evita generarea tuturor solutiilor posibile, metoda backtracking atribuie pe rand valori elementelor vectorului x. Mai exact, componenta xk primeste o valoare doar in cazul in care componentele x1,x2,,xk-1 au primit deja valori. In acest caz, componentei xk i se atribuie pe rand acele valori posibile(din multimea Sk) care indeplinesc conditiile de continuare. Conditiile de continuare sunt conditii derivate din conditiile interne, care stabilesc daca pentru o anumita valoare pentru xk are sau nu sens sa continuam constructia solutiei.

2. Backtracking in plan
Ideea cautarii cu revenire poate fi generalizata si se poate aplica si problemelor in care cautarea se realizeaza in plan(intr-o matrice). In acest caz, solutia se prezinta sub forma unui tablou bidimensional.

3. Probleme clasice
1. Problema celor n dame pe o tabl de ah Fiind dat o tabl de ah, de dimensiune n*n, se cer toate solu iile de aranjare a n dame, astfel nct s nu se afle dou dame pe aceea i linie, coloan sau diagonal (dame s nu se atace reciproc).

Exemplu: Presupunem c dispunem de o tabl de dimensiune 4x4. Observ m c o dam trebuie s fie plasat singur pe linie. Plas m prima dam pe linia 1, coloana 1. A doua dam nu poate fi a ezat dect n coloana 3. Observ m c a treia dam nu poate fi plasat n linia 3. ncerc m atunci plasarea celei de-a doua dame n coloana 4. A treia dam nu poate fi plasat dect n coloana 2. n aceast situa ie dama a patra nu mai poate fi a ezat . ncercnd s avans m cu dama a treia, observ m c nu este posibil s o plas m nici n coloana 3, nici n coloana 4, deci o vom scoate de pe tabl . Dama a doua nu mai poate avansa, deci i ea este scoas de pe tabl . Avans m cu prima dam n coloana 2. A doua dam nu poate fi a ezat dect n coloana 4. Dama a treia se a eaz n prima coloan . Acum este posibil s plas m a patra dam n coloana 3 si astfel am ob inut o solu ie a problemei. Algoritmul continu n acest mod pn cnd trebuie scoas de pe tabl prima dam . Pentru reprezentarea unei solu ii putem folosi un vector cu n componente (avnd n vedere c pe fiecare linie se g se te o singur dam ).

 

Exemplu pentru solu ia g sit avem vectorul ST ce poate fi asimilat unei stive. Dou dame se g sesc pe aceea i diagonal dac si numai dac este ndeplinit condi ia: |st(i)-st(j)|=|i-j| ( diferen a, n modul, ntre linii si coloane este aceea i).

ntruct doua dame nu se pot g si n aceea i coloan , rezult c o solu ie este sub form de permutare. O prim idee ne conduce la generarea tuturor permut rilor si la extragerea solu iilor pentru problema ca dou dame s nu fie plasate n aceea i diagonal . A proceda astfel, nseamn c lucr m conform strategiei backtracking. Aceasta presupune ca imediat ce am g sit dou dame care se atac , s relu m c utarea.

Conditii interne:

st[i ] {1,2,..., n}  st[i ] { st[ j ], i { j , i, j ! 1, n i  j { st[i]  st[ j ] , i { j , i, j ! 1, n

Damele nu pot fi plasate pe aceeasi coloana Damele nu pot fi plasate pe aceeasi diagonala

2. Problema labirintului Se d un labirint sub form de matrice cu m linii i n coloane. Fiecare element al matricei reprezint o camer a labirintului. ntr-una din camere, de coordonate lin i col, se g se te un om. Se cere s se g seasc toate ie irile din labirint. Nu este permis trecerea de dou ori prin aceea i camer .

 O prim problem care se pune este precizarea modului de codificare a ie irilor din fiecare camer a labirintului.  Fie l(i,j) un element a matricei. Acesta oate lua valori ntre 0 i 15. Se consider ie irile spre nord, est, sud i vest, luate n aceast ordine. Pentru fiecare direc ie cu ie ire se re ine 1, iar n caz contrar, se re ine 0. Un ir de 4 cifre 1 sau 0 formeaz un num r n baza 2. Acest num r este convertit n baza 10 i re inut n l(i,j). De exemplu, pentru c amer care are ie ire n nord i vest, avem 10012=910.

Rezolvare O camer vizitat se re ine prin coordonatele ei lin(linia) i col(coloana). Din acest potiv, pentru a re ine un traseu vom utiliza o matrice cu dou coloane i mai multe linii : sol. De exemplu, dac prima camer este cea de coordonate (2,2), o solu ie este (2,2), (2,3), (1,3). Nu toate solu iile au aceea i lungime, ntruct exist trasee de lungime diferit . Se ob ine o solu ie atunci cnd coordonatele camerei unde s-a intrat sunt n afara matricei(nu au linia ntre 1 i m i nu au coloana ntre 1 i n). Evident, atunci cnd s-a g sit o solu ie, aceasta se afi eaz . Spunem c o camer este accesibil dac exist intrare din camera curent c tre ea. Trebuie s avem grij la modul n care test m dac o camer este accesibil sau nu. Este o opera ie n care se testeaz con inutul unui anumit bit. Aceste se ob ine efectund un i logic ntre dou valori. De exemplu, dac test m ie irea spre sud, atunci efectu m i logic ntre 00102=210 i valoarea re inut n matrice pentru camera curent . Dac valoarea ob inut este diferit de 0, atunci avem ie ire din camera curent c tre sud. nainte de a intra ntr-o camer accesibil , se testeaz dac respectiva camer a mai fost vizitat sau nu. Pentru aceasta utiliz m func ia vizitat. n caz c a fost vizitat , se face pasul napoi.

3. Problema calului pe tabla de ah(iterativ) Determina i toate modalit ile ca un cal s parcurga toate p tratele tablei de ah de dimensiune n*n(3<n<21)., o singur dat , pornind dintr-un p trat dat.

 Analiza problemei Problema este un exemplu clasic de backtracking n plan. Dintr-un p trat dat al tablei de ah ne putem deplasa n cel mult 8 p trate vecine. Dac (x,y) sunt coordonatele unei celule pe tabl , atunci pozi iile succesoare are acestui p trat sunt (x-2,y-1), (x-2,y+1), (x1,y-2), (x-1,y+2), (x+1, y-2), (x+1,y+2), (x+2,y-1), (x+2,y+1). n scopul rezolv rii problemei vom construi un vector cu pozi ii, p, i un vector cu direc ii, x. x[i] poate lua valori de la 1 la 8, n func ie de direc ia n care ne deplas m din punctul i-1 n punctul i. Pentru x[k] vom ncerca toate numerele de la 0 la 7, dac ne deplas m n direc ia x[k](n func ie de vectorii de direc ie dx i dy). Dac ne putem plasa pe un p trat liber vom nainta, k se incrementeaz i x[k] prime te valoarea 0(pentru ca primul succesor ncercat apoi s fie 1).

4. Problema calului pe tabla de sah(recursiv)

Rezolvarea problemei anterioare folosind o metoda recursiva.

 Analiza problemei si proiectarea solutiei Mai intai completam toate patratele tablei cu -1 si patratul de start cu valoarea 0. Functia back va avea 3 parametri, reprezentand coordonatele patratului de start si pasul curent al calului. Vom incerca pentru parametrii l si c toate pozitiile candidat din jur. Vom stabili ca o pozitie (x,y) este candidat daca se afla pe tabla si daca valoarea pozitiei este -1. In acest caz se inainteaza aplicandu-se functia back(k+1).

5. Problema broscutei
Avem un lac sub forma de dreptunghi de forma n*m. O broscuta se afla in punctul de coordonate (x0,y0). Aceasta trebuie sa ajunga in punctul de coordonate (x1,y1). Ea se poate deplasa in N,S,E,V, doar pe suprafata lacului. Broscuta poate intalni pe drum obstacole, prin dreptul carora nu poate trece. Sa se afiseze toate solutiile prin care broscuta ajunge din pozitia initiala in cea finala.

 Solutie Algoritmul de generare simuleaza toate miscarile posibile ale broscutei din fiecare pozitie valida de pe tabla. Considerand o astfel de pozitie (x,y), exista 4 elemente succesoare acesteia. Pentru a evita validarea suplimentara a unei pozitii(daca se afla sau nu in interiorul tablei) se opteaza pentru bordarea matricei, cu obstacole pe liniile 0 si n+1, respectiv coloanele 0,m+1.

 Codificarea datelor - variabila globala k retine numarul de pozitii de pe traseul curent - tabloul st simuleaza stiva in care se retin traseele. Elementele st[i][1] si st[i][2] retin indicii pozitiei cu numarul i de pe drum(0<i<k+1). - matricea a retine configuratia tablei. }n plus, elementul a[i][j]=2, daca pozitia este deja plasata pe traseul curent. - tablourile dx si dy sunt folosite pentru identificarea indicilor vecinilor unei pozitii de pe tabla

 Conditii de continuare

Pozitia curenta trebuie sa fie in interiorul tablei, fara obstacol, si neplasata deja pe traseu: a[x][y]=0.

4. Bibliografie
}

Fundamentele programarii D.Lica si M. Fundamentele programarii Pasoi Culegere de probleme pentru liceu E. Cerchez Probleme rezolvate si algoritmi D.H. Probleme algoritmi Logofatu