👤

1. Se citeste un numar natural n, reprezentand dimensiunea unei table de sah. Sa se genereze toate solutiile de a aseza n ture pe tabla de sah astfel incat turele sa nu se atace intre ele.

2. Se citesc 2 numere n si p si apoi numele a n copii. Sa se genereze toate echipele care se pot forma luand cate p copii din cei n.
urgent dau coroana


Răspuns :

Problema damelor :

#include <iostream>

using namespace std;

int v[20], n, index = 1;

int solutie(int k){

   if (k==n) return 1;

   return 0;

}

void tipar(){

   int  i,j;

   cout << "\n\t Solutie #" << index++ << " : ";

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

       cout << endl;

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

           if(j==v[i]) cout << "R ";

           else cout << "0 ";

       }

   }

}

int valid(int k){

   int i,abs;

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

       //cout << "Test : " << i<< k <<" -> "<<v[i] << v[k]<<endl;

       //Test coloana

       if(v[i]==v[k]) return 0;

       //Test diagonala

       abs = v[k]-v[i];

       if(abs<0) abs *=-1;

       if(k-i == abs) return 0;

   }

   return 1;

}

void BK(int k) {

   int i;

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

       v[k]=i;

       if (valid(k)==1){

           if (solutie(k)==1)

               tipar();

           else

               BK(k+1);

       }

   }

}

int main()

{

   cout << "Numarul de regine : ";

   cin >> n;

   BK(1);

   if(index==1) cout << "Nu exista solutii.";

}

Iar problema cealalta e un simplu combinari de n luate cate k la care memorezi numele copiilor in vector si il afisezi in functia de afisare. Mai exact in loc de v[i] afisezi nume[v[i]].