Buna! Ma puteti ajuta si pe mine, va roog. Am incercat sa rezolv Problema Regine si nu inteleg de ce nu imi afiseaza nimic.
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 citește de la tastatură numărul 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ă.
Acesta e programul pe care l-am incercat:
#include <iostream>
#include <cstring>
#include<math>
using namespace std;
int n,v[11];
char a[11][11];
void citire()
{
f>>n;
for (int i=1; i<=n; ++i)
for (int j=1; j<=n; ++j)
a[i][j]=0;
}
int verif (int k)
{ for (int i=1; i<k; ++i)
if (v[i]==v[k] || k-i==abs(v[k]-v[i]))
return 0;
return 1;}
void afis ()
{ for (int i=1; i<=n; ++i)
{for (int j=1; j<=n; ++j)
{if (v[j]==i)
a[i][j]='*';
else
a[i][j]='-';
g<<a[i][j];
}
g<<'\n';
}
}
void back1(int k)
{ if (v[k]==n+1)
afis ();
else
for (int i=1; i<=n;++i)
{ v[k]=i;
if(verif(k))
back1 (k+1);
}
}
int main ()
{ citire ();
back1 (1);
return 0;
}
Răspunsuri la întrebare
Răspuns de
9
Te pot ajuta trimitandu-ti sursa mea la problema regine1. Incearca s-o analizezi pas cu pas ca sa vezi unde gresesti. Succes!
#include <bits/stdc++.h>
using namespace std;
int n, x[20];
bool gasit;
bool cont(int k)
{
for(int i = 1 ; i < k ; i ++)
{
if(x[i] == x[k]) return false;
if(k - i == abs(x[k] - x[i])) return false;
}
return true;
}
void afisare(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(cont(k))
if(k == n) afisare(n);
else back(k + 1);
}
}
int main()
{
cin >> n;
back(1);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int n, x[20];
bool gasit;
bool cont(int k)
{
for(int i = 1 ; i < k ; i ++)
{
if(x[i] == x[k]) return false;
if(k - i == abs(x[k] - x[i])) return false;
}
return true;
}
void afisare(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(cont(k))
if(k == n) afisare(n);
else back(k + 1);
}
}
int main()
{
cin >> n;
back(1);
return 0;
}
StefaniaR:
Multumesc!!
Alte întrebări interesante
Engleza,
8 ani în urmă
Biologie,
8 ani în urmă
Matematică,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Fizică,
9 ani în urmă