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
#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;
}