online: 4; azi: 216; total: 52222 Manual clasa a xi a - Tehnici de programare - Metoda backtraking

Probleme Rezolvate



Manual clasa a Xi a

Tehnici de programare

Metoda backtraking

Două persoane îşi împart n obiecte astfel: prima persoană ia m obiecte, iar cealaltă persoană — restul obiectelor. Să se genereze toate posibilităţile de distribuire a celor n obiecte între cele două persoane.
# include < iostream >
using namespace std ;
int n, m;
string obiecte[ 100 ];
string persoana1[ 100 ];
string persoana2[ 100 ];
bool utilizat[ 100 ];
void tipar () {
cout << "Persoana 1: " ;
for ( int i = 0 ; i < m; i++) {
cout << persoana1[i] << " " ;
}
cout << endl ;
cout << "Persoana 2: " ;
for ( int i = 0 ; i < n - m; i++) {
cout << persoana2[i] << " " ;
}
cout << endl << "-----" << endl ;
}
void bt ( int k, int start) {
if (k == m) {
int idx2 = 0 ;
for ( int i = 0 ; i < n; i++) {
if (!utilizat[i]) {
persoana2[idx2++] = obiecte[i];
}
}
tipar ();
return ;
}
for ( int i = start; i < n; i++) {
if (!utilizat[i]) {
persoana1[k] = obiecte[i];
utilizat[i] = true ;
bt (k + 1 , i + 1 );
utilizat[i] = false ;
}
}
}
int main () {
cout << " Introduceti numarul de obiecte (n): " ;
cin >> n;
cout << " Introduceti numarul de obiecte pentru persoana 1 (m): " ;
cin >> m;
cin. ignore ();
for ( int i = 0 ; i < n; i++) {
cout << " Introduceti numele obiectului " << i + 1 << ": " ;
getline (cin, obiecte[i]);
}
bt ( 0 , 0 );
return 0 ;
}