Sunteți pe pagina 1din 2

Metoda de programare Backtracking

Problema celor n dame

APLICAŢIA 1.

Fie următoarea problemă:

Să se determine toate modalităţile de a plasa n dame pe o tablă de şah n×n astfel


încât să nu se atace. Două dame se atacă dacă sunt aşezate pe aceeaşi linie, coloană sau
diagonală.

Exemlu:
 Pentru n=3 nu sunt soluţii.

 Pentru n=4 se va afişa: 2 4 1 3; 3 1 4 2.

D D

D D

D D

D D

 Cum facem legătura între tabla de şah şi stivă?


 Care este spaţiului soluţiilor posibie?
 Care sunt condiţiile de continuare pentru obţinerea unei soluţii?
 Cum arată soluţiile rezultat?
 Cum pot reprezenta grafic soluţiile rezultat?

Indicaţie:
 Avem de aşezat n dame pe o tablă de şah n×n, de unde deducem că pe fiecare linie va
exista o singură damă; este suficient să reţinem coloanele unde sunt plasate damele; O soluţie
a problemei este de forma x= (x1, x2,..., xn), unde xk indică coloana pe care este plasată dama
de pe linia k.
 Restricţia ca damele să nu fie plasate pe aceeaşi linie este indeplinită.
 Condiţia ca pe orice coloană să se afle o singură damă este echivalentă cu xi≠ xj pentru
orice i≠j.
 Fie două dame aflate pe poziţiile (i, xi) şi (j, xj). Condiţia ca două dame să nu se afle pe
aceeaşi diagonală este: i- xi≠ j-xj şi i+xi≠ j+xj pentru orice i≠j.
Adică |i- j|≠ |xi -xj| pentru orice i≠j. (Diferenţa, în modul, între linii şi coloane este
diferită).
 Condiţiile de continuare se deduc din condiţiile interne. Astfel, dama de pe linia k trebuie
să nu se atace nici pe coloană, nici pe diagonală cu damele plasate pe primele k-1 linii. (xi≠ xk
şi |k- i|≠ |xk –xi|, pentru orice i = 1, k − 1 )
ACTIVITATEA 2.

Fie problemele următoare. Să se scrie programe C++ pentru rezolvarea acestora,


folosind metoda de programare Backtracking.

1.Să se modifice afişarea soluţiilor în forma grafică:


. . D.
D. . .
...D
.D..

2. Se dă o tablă de dimensiune n × n pătrate. Să se aşeze pe ea n regi, câte unul pe o linie,


astfel încât să nu se atace oricare doi dintre ei. Se cer să se afişeze toate soluţiile posibile. Un
rege atacă un alt rege dacă este plasat într-un pătrat vecin în oricare dintre cele 8 direcţii (sus,
jos, stânga, stânga sus, stânga jos, dreapta, dreapta sus, dreapta jos). Numărul natural nenul n se
citeşte de la tastatură, iar soluţiile vor fi afişate într-un fişier, în următoarea formă: pentru n=4 o
soluţie este: R...
..R.
R...
...R

3. Fie o tablă de şah de dimensiune n × n. Determinaţi toate posibilităţile de a amplasa n


ture pe tabla dată, astfel încât să nu existe printre ele perechi care se atacă. Două ture se atacă
reciproc atunci când se află pe aceeaşi linie sau pe aceeaşi coloană. Numărul natural nenul n se
citeşte de la tastatură, iar soluţiile vor fi afişate într-un fişier.

4. Determinaţi toate posibilităţile de a amplasa un număr maxim de ture pe primele m


linii ale unei table de şah pătratice de dimensiune n × n, astfel încât oricare două dintre ele să nu
se atace reciproc. Numerele naturale nenule n şi m se citesc de la tastatură, iar soluţiile vor fi
afişate într-un fişier.

5. Determinaţi toate posibilităţile de a amplasa crescător un număr maxim de ture pe


primele m linii ale unei table de şah de dimensiune n × n, astfel încât oricare două dintre ele să
nu se atace reciproc. Numerele naturale nenule n şi m se citesc de la tastatură, iar soluţiile vor fi
afişate într-un fişier.

6. Să se aşeze n cai pe o tablă de şah n × n astfel încât aceştia să nu se atace între ei.

7*. Se consideră o tablă de şah de dimensiune n × n şi un cal plasat în colţul stînga sus al
tablei. Se cere să se afişeze toate posibilităţile de mutare a calului astfel încât să treacă o singură
dată prin fiecare pătrat al tablei.

Indicaţie: Folosim backtrackig în plan. Posibilităţile de deplasare ale calului la un moment dat
sunt memorate în doi vectori: x=(-1,1,2,2,1,-1,-2,-2) şi y=(2,2,1,-1,-2,-2,-1,1).

8*. Un cal şi un rege se află pe o tablă de şah. Unele câmpuri ale tablei sunt „arse”,
poziţiile lor fiind cunoscute. Calul nu poate călca pe câmpuri „arse”, iar orice mişcare a calului
pe tabla de şah face ca respectivul câmp să devină „ars”. Să se afle dacă există o succesiune de
mutări permise (cu restricţiile de mai sus), prin care calul să poată ajunge la rege şi să revină la
poziţia iniţială. Poziţia iniţială a calului, precum şi poziţia regelui se consideră „nearse”.

* Problemă cu grad ridicat de dificultate.

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