Sunteți pe pagina 1din 3

Problema celor n dame BACKTRACKING

Enunţ. Fiind dată o tablă de şah cu dimensiunea n×n, se cer toate soluţiile de
aranjare a n dame, astfel încât să nu se afle două dame pe aceeaşi linie, coloană sau
diagonală (damele să nu se atace reciproc). De exemplu, dacă n=4, o soluţie este
reprezentată în figura 1., a). Modul de obţinere al soluţiei este prezentat în figurile
următoare, de la b) la i):
1 2 3 4

Figura 1. Exemplu pentru n=4


Comentarii referitoare la figurile anterioare

b) Observăm că o damă trebuie să fie plasată singură pe linie. Poziţionăm prima damă
pe linia 1, coloana 1.
c) A doua damă nu poate fi aşezată decât în coloana 3.
d) 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.
e) A treia damă nu poate fi plasată decât în coloana 2.
f) În această situaţie dama a patra nu mai poate fi aşezată. Încercând să avansăm cu
dama a treia, observăm că nu este posibil să o plasăm nici în coloana a-3-a, nici în
coloana a-4-a, 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 a-2-a.
g) A doua damă nu poate fi aşezată decât în coloana a 4-a.
h) Dama a treia se aşează în prima coloană.
i) Acum este posibil să plasăm a patra damă în coloana 3 şi astfel am obţinut o soluţie a
problemei.

Algoritmul continuă în acest mod până când trebuie scoasă de pe tablă prima damă.

 Pentru căutarea şi reprezentarea unei soluţii folosim un vector cu n componente,


numit sol (având în vedere că pe fiecare linie se găseşte o singură damă). Prin sol[i]
înţelegem coloana în care se găseşte dama de pe linia i.

Alăturat, puteţi observa modul în care este reprezentată soluţia cu ajutorul vectorului
sol.

 Două dame se găsesc pe aceeaşi diagonală dacă şi numai dacă este îndeplinită
condiţia:

|sol(i)-sol(j)|=|i-j|

(diferenţa, în modul, dintre linii şi coloane este aceeaşi).


Întrucât două 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 şi la
extragerea soluţiilor pentru problemă
(ca două dame să nu fie plasate în
aceeaşi diagonală). Dacă procedăm
astfel, înseamnă că nu lucrăm conform
strategiei backtracking.
Aceasta presupune ca imediat ce am
găsit două dame care se atacă, să
reluăm căutarea în alte condiţii. Faţă
de programul de generare a
permutărilor, programul de generare a tuturor soluţiilor problemei celor n dame are o
singură condiţie suplimentară, în subprogramul valid. Mai jos, puteţi observa noua
versiune a subprogramului valid. Dacă îl utilizaţi în locul subprogramului cu acelaşi
nume din programul de generare a permutărilor, veţi obţine programul care rezolvă
problema celor n dame.