Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2014-01-17 21:17:35.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:damesah.in, damesah.outSursăArhiva Educationala
AutorArhiva EducationalaAdăugată defmins123FMI No Stress fmins123
Timp execuţie pe test0.5 secLimită de memorie20480 kbytes
Scorul tăuN/ADificultateN/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 este formata din N numere, al i-lea numar reprezentand coloana pe care se afla dama de pe linia i. Pe cea de-a doua linie, se va gasi numărul total de soluţii.

Restricţii

  • 4 ≤ N ≤ 13

Exemplu

damesah.indamesah.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 .

Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?