fbpx

Problema #1281 – Regine1 – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se consideră o tablă de șah de dimensiune n. Să se plaseze pe tablă n regine astfel încât să nu existe două regine care să se atace.

Date de intrare

Programul citește de la tastatură numărul n.

Date de ieșire

Programul va afișa pe ecran o singură configurație validă a tablei de șah. Ea va fi alcătuită din n linii cu câte n caractere - sau *, separate prin câte un spațiu. Caracterul - reprezintă o poziție liberă de pe tablă, iar caracterul * reprezintă o poziție de pe tablă ocupată de o regină.

Restricții și precizări

  • 4 ≤ n ≤ 10;
  • două regine se atacă dacă se află pe aceeași linie, aceeași coloană sau aceeași diagonală;
  • orice configurație validă a tablei este acceptată.

Exemplu

Intrare

4

Ieșire

- - * - 
* - - - 
- - - * 
- * - - 
#include <bits/stdc++.h>

using namespace std;

int n , a[11] , p[11] , ok , cnt;

void afis()
{
    for(int i = 1 ; i <= n ; ++i)
    {
        for(int j = 1 ; j <= n ; ++j)
            if(a[j] == i) cout << "* ";
            else cout << "- ";
        cout << endl;
    }
    cnt++;
}

void back(int ind)
{
    for(int i = 1 ; i <= n && cnt == 0; ++i)
    {
        if(!p[i])
        {
            ok = 0;
            a[ind] = i;
            p[i] = 1;
            for(int j = 1 ; j < ind; ++j)
                if(ind - j == abs(a[ind] - a[j])) ok = 1;
            if(ind == n && ok == 0)
                afis();
            else if(ok == 0) back(ind + 1);
            p[i] = 0;
        }
    }
}

int main()
{
    cin >> n;
    back(1);
    return 0;
}
Comentarii

S-ar putea sa iti placa