Informatică, întrebare adresată de StefaniaR, 9 ani în urmă

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


StefaniaR: Multumesc!!
Alte întrebări interesante