Sunteți pe pagina 1din 2

Algoritmul backtracking

- se foloseste pentru problemele in care datele sunt prezentate


sub forma unui vector si solutia va fi un vector

EX:
Problema reginelor pe o tabla de sah cu dimensiune nXn se
pozitioneaza n regine astfel incat sa nu se atace (sa nu fie pe
aceeasi linie, coloana si diagonala)
n=4
- fiecare regina este bine definita daca i se cunoaste linia si
coloana
- pentru fiecare linie am propus o coloana, orice de la 1 la n
- am respectat conditiile ca reginele sa nu se atace
- constructia solutiei s-a realizat astfel:
presupun alese reginele r[1],r[2]r[i-1]
pentru regina r[i] am multimea de posibilitati (coloanele
de la 1 la n)
daca exista o posibilitate astfel incat sa respect
conditia de a nu se ataca => r[i]
daca nu exista nicio posibilitate pentru regina r[i] =>ma
intorc la r[i-1] si caut alte posibilitati

Metoda:
- fiecare element are o multime de solutii posibile
- se respecta in alegerea solutiei conditiile de continuitate
Problema reginelor
- multimea de solutii posibile pentru fiecare regina =1,n
- conditiile de continuitate
- pe aceeasi linie: nu pot fi din constructie
- pe aceeasi coloana: propun valoarea j care trebuie sa
fie diferita de toate val propuse anterior
- pe aceeasi diagonala

Backtracking in plan
void bck_plan(int x,int y)
{
explorare(x,y) => din (x,y) ma deplasez in directiile permise
si verific conditiile
if(final(x,y)
afis
else
for(k=0;k<nr_directii;k++)
{
X=x+dx[k]
Y=y+dy[k]
if(Nevizitat(X,Y)==1 && verif(X,Y)==1)

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