online: 13; azi: 781; total: 51236 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. Fiecare obiect are o valoare vi. Să se genereze toate posibilităţile de distribuire a celor n obiecte, între cele două persoane, astfel încât fiecare persoană să primească obiecte care să aibă aceeaşi valoare totală.
# include < iostream >
using namespace std ;
int n, m;
int obiecte[ 100 ];
bool utilizat[ 100 ];
int sumaTotala = 0 ;
void tipar ( int sumaP1, int sumaP2) {
if (sumaP1 != sumaP2) {
return ;
}
cout << "Persoana 1: " ;
for ( int i = 0 ; i < n; i++) {
if (utilizat[i]) {
cout << obiecte[i] << " " ;
}
}
cout << endl ;
cout << "Persoana 2: " ;
for ( int i = 0 ; i < n; i++) {
if (!utilizat[i]) {
cout << obiecte[i] << " " ;
}
}
cout << endl << "-----" << endl ;
}
void bt ( int k, int sumaP1, int sumaP2, int cntP1) {
if (k == n) {
tipar (sumaP1, sumaP2);
return ;
}
if (cntP1 < m) {
utilizat[k] = true ;
bt (k + 1 , sumaP1 + obiecte[k], sumaP2, cntP1 + 1 );
utilizat[k] = false ;
}
bt (k + 1 , sumaP1, sumaP2 + obiecte[k], cntP1);
}
int main () {
cout << " Introduceti numarul de obiecte (n): " ;
cin >> n;
cout << " Introduceti numarul de obiecte pentru persoana 1 (m): " ;
cin >> m;
for ( int i = 0 ; i < n; i++) {
cout << " Introduceti valoarea obiectului " << i + 1 << ": " ;
cin >> obiecte[i];
sumaTotala += obiecte[i];
}
if ( sumaTotala % 2 == 0 ) {
bt ( 0 , 0 , 0 , 0 );
} else {
cout << "Nu exista solutii , deoarece suma totala a obiectelor este impara." << endl ;
}
return 0 ;
}

Acest program folosește funcția bt () pentru a genera toate posibilitățile de distribuire a obiectelor între cele două persoane, astfel încât prima persoană să ia m obiecte și cele două persoane să primească obiecte cu aceeași valoare totală. Funcția tipar() afișează distribuțiile generate. Informațiile despre obiecte și distribuția acestora sunt stocate în array -uri.