Informatică, întrebare adresată de c6072849, 8 ani în urmă

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.
Programul citeste de la tastatura n.
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ă.

!!!
Am nevoie de program C++
https://www.pbinfo.ro/?pagina=probleme&id=1281

Răspunsuri la întrebare

Răspuns de pmarian98
4

#include <bits/stdc++.h>

using namespace std;

int n, x[20];

bool gasit;

bool valid(int k)

{

   for(int i = 1 ; i < k ; i ++)

   {

       if(x[i] == x[k]) return false;  

//x[k] != x[i], pentru 1< i < k – sa nu avem doua regine pe aceeasi linie;

       if(k - i == abs(x[k] - x[i])) return false;

//k - i != abs(x[k] - x[i]), pentru 1< i < k – sa nu avem doua regine pe //aceeasi diagonala;

   }

   return true;

}

//afisarea se realizeaza ca la partitile unei multimi

void prelsol(int n)

{

   gasit = true;

   for(int i = 1 ; i <= n ; i ++)

   {

       for(int j = 1 ; j <= n ; j ++)

        if(x[j] == i) cout << "* ";

                 else cout << "- ";

       cout << "\n";

   }

}

void back(int k)

{

   for(int i = 1 ; !gasit && i <= n ; i ++)

   {

       x[k] = i;

       if(valid(k))

        if(k == n) prelsol(n);

              else back(k + 1);

   }

}

int main()

{

   cin >> n;

   back(1);

   return 0;

}

Alte întrebări interesante