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

Va roooggg qm nevoie urgenta
Problema trebuie rezolvata cu matrici ,nu cu vectori,și trebuie în C++ va rog e urgent

Anexe:

Sergetec: Trebuie sa iti afiseze toate solutiile posibile sau doar una valida?
lauraxenia283: toate

Răspunsuri la întrebare

Răspuns de Sergetec
1

Salut!

Ai rezolvarea in C++ mai jos

#include <iostream>

using namespace std;

const int N = 10;

int tabla[N][N];

int n;

bool pozitieValida(int linie, int col) //verific daca pot sa pun o regina pe aceasta linie/coloana

{

 for (int i = 0; i < linie; i++)

 {

   if (tabla[i][col] == 1)

   {

     return false;

   }

 }

 // diagonala din stanga

 for (int i = linie - 1, j = col - 1; (i >= 0) && (j >= 0); i--, j--)

 {

   if (tabla[i][j] == 1)

   {

     return false;

   }

 }

 //diagonala din dreapta

 for (int i = linie - 1, j = col + 1; (i >= 0) && (j < n); i--, j++)

 {

   if (tabla[i][j] == 1)

   {

     return false;

   }

 }

 return true;

}

void scrieSolutie()

{

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

 {

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

   {

     cout << tabla[i][j];

   }

   cout << '\n';

 }

 int cn = n;

 while (cn)

 {

   cout << "-";

   cn--;

 }

 cout << '\n';

}

void regina(int lin)

{

 if (lin == n)

 {

   scrieSolutie();

 }

 for (int col = 0; col < n; ++col)

 {

   if (pozitieValida(lin, col)) //daca pot sa pun regina atunci o pun

   {

     tabla[lin][col] = 1;

     regina(lin + 1); //recursivitate

     tabla[lin][col] = 0; //resetam tabla pt o alta solutie

   }

 }

}

int main()

{

 cin >> n;

 regina(0); //incepem din coltul stanga sus

 return 0;

}

Alte întrebări interesante