Sunteți pe pagina 1din 2

#include <iostream>

#include <stdlib.h>
//alt ex: selectia in cazul alg-lui lui dijkstra
using namespace std;
#define NMAX 6
typedef struct{
int castig;
int greutate;
int index;
} obiect;
int indiciObiecteSelectate[NMAX];
void sortareInterschimbare(obiect obiecte[], int nrObiecte){//ordonam obiectele
in sens descrescator, dupa eficienta
float eficienta[NMAX];
int i;
for(i = 0; i < NMAX; i++) eficienta[i] = (float)obiecte[i].castig/obiect
e[i].greutate;
bool sortat = false;
while(!sortat){
sortat = true;
for(i = 0; i < nrObiecte; i++)
if(eficienta[i] < eficienta[i+1]){
obiect temp;
temp = obiecte[i];
obiecte[i] = obiecte[i+1];
obiecte[i+1] = temp;
eficienta[i] = (float)obiecte[i].castig/obiecte[
i].greutate;
eficienta[i+1] = (float)obiecte[i+1].castig/obie
cte[i+1].greutate;
sortat = false;
}
}
}
void umplereRucsac(obiect obiecte[], int nrObiecte, int greutateSac){
int greutateTemp = 0, i, j = 0;
for(i = 0; i < nrObiecte; i++) indiciObiecteSelectate[i] = 0;
float eficienta[NMAX];
for(i = 0; i < NMAX; i++) eficienta[i] = (float)obiecte[i].castig/obiect
e[i].greutate;//eficienta dupa ordonare
for(i = 0; i < nrObiecte; i++)
if((greutateTemp + obiecte[i].greutate) <= greutateSac){
greutateTemp +=obiecte[i].greutate;
indiciObiecteSelectate[j++] = i;
}
//afisam continutul sacului
for(int k = 0; k < j; k++){
cout << "Obiectul " << obiecte[indiciObiecteSelectate[k]].index
;
cout << "\tcastig " << obiecte[indiciObiecteSelectate[k]].castig
;
cout << "\tgreutate " << obiecte[indiciObiecteSelectate[k]].greu
tate;
cout << "\tsatisfactie selectie " << eficienta[k] << endl;
}
}

int main(){
obiect obiecte[NMAX] = {{4,5,1}, {2,3,2}, {3,4,3}, {1,2,4}, {5,6,5}, {6,
7,6}};
int greutateRucsac, nrObiecte;
cout << "Introduceti numarul de obiecte, <" << NMAX << ": ";
cin >> nrObiecte;
cout << "Introduceti greutatea rucsacului: ";
cin >> greutateRucsac;
sortareInterschimbare(obiecte, nrObiecte);
umplereRucsac(obiecte, nrObiecte, greutateRucsac);
system("PAUSE");
return 0;
}

S-ar putea să vă placă și