Fişierul intrare/ieşire: | damesah.in, damesah.out | Sursă | Arhiva Educationala |
Autor | Arhiva Educationala | Adăugată de | |
Timp execuţie pe test | 0.5 sec | Limită de memorie | 20480 kbytes |
Scorul tău | N/A | Dificultate | N/A |
Vezi solutiile trimise | Statistici
Problema Damelor
Se dau N dame şi o tablă de şah de dimensiune NxN. Să se găsească toate modalităţile de a aranja toate damele astfel încât oricare două dame să nu se atace. Două dame se atacă dacă se află pe aceeaşi linie, coloană sau diagonală. Se cere să se afişeze prima soluţie în ordine lexicografică şi numărul total de soluţii.
Date de intrare
Fişierul de intrare damesah.in va contine pe prima linie numărul natural N, având semnificaţia din enunţ.
Date de ieşire
În fişierul de ieşire damesah.out se vor găsi două linii. Pe prima linie va fi afişată prima soluţie în ordine lexicografică. Aceasta solutie va fi formată din N numere, al i-lea număr reprezentând coloana pe care se află dama de pe linia i. Pe cea de-a doua linie, se va găsi numărul total de soluţii.
Restricţii
- 4 ≤ N ≤ 13
Exemplu
damesah.in | damesah.out |
---|---|
4 | 2 4 1 3 2 |
Explicatie
Pentru N = 4 dame, prima solutie generata va fi 2 4 1 3. Fiecare numar V[i] reprezinta coloana pe care se va afla dama de pe linia i. S-au gasit in total 2 solutii.
Indicatii de rezolvare
Aranjarea damelor pe tabla de sah este o problema clasica de backtracking. Metoda de rezolvare cu backtracking presupune generarea tuturor solutiilor si testarea lor daca sunt valide sau nu. O dama poate fi plasata pe tabla de sah daca pentru fiecare dama aranjata deja, aceasta nu se afla pe aceeasi coloana, linie sau diagonala cu niciuna dintre ele. Solutia se afla aici .
Pentru a optimiza algoritmul, pentru fiecare dama de pe tabla de sah, se va marca, folosind vectori auxiliari linia, coloana si diagonala pe care este plasata aceasta. Astfel se poate verifica in complexitate O(1) daca o dama poate fi pusa sau nu pe tabla de sah la o anumita pozitie. O astfel de solutie gasim aici.