Jump to content

''Alkatīgais'' algoritms


Kungs
 Share

Recommended Posts

Sveiki. Vai kāds nevarētu palīdzēt pārveidot programmas kodu tā lai tiktu pielietots ''alkatīgais algoritms''?

 

#include<iostream>
using namespace std;

#define SIZE 10

//izveidojam strukturu objektiem
struct Object{
int weight;
int value;
};

Object obj[size] = { {10,18}, {11,20}, {12,17}, {13,19}, {14,25},{15,21},{16,27},{17,23},{18,25},{19,24}};
int limw, totv, maxv; //svara limits, kopeja vertiba, max sasniegta vertiba

int s[size]; //vektors rada kadi priekshmeto ir tekosha bridi
int opt_s[size]; //vektors rada kadi priekshmeti ir maksimalas vertibas izkartojuma un maxv ir ta vertiba

void saveOptS() { //paligfunkcija maksimala izkartojuma pieshkirshanai
for (int i=0; i<SIZE; i++) {
	opt_s[i] = s[i];
}
}

void getMax(int i, int tw, int av) {

int av1; 
if (i == SIZE) { 
	if (av > maxv) {
		saveOptS();
		maxv = av;
		cout <<"I'm in the nested if" <<endl;
	}
	return;
}
if ( (tw+obj[i].weight) <= limw ) {  
	cout <<"obj[i] = " <<obj[i].weight <<endl;
	// cout <<"maxv = " <<maxv <<endl;
	s[i] = 1; 
	getMax(i+1,tw+obj[i].weight,av); 
	s[i] = 0; 
}
av1 = av-obj[i].value; 
if ( av1>maxv) 
	getMax(i+1,tw,av1);
// cout <<"av1 = " <<av1 <<endl;
//cout <<"maxv = " <<maxv <<endl;
}

int main() {

int i, w_count = 0, v_count = 0; 
limw = 70; 
cout <<"limw = " <<limw <<endl;

for (totv = i = 0; i < SIZE; i++) {
	totv += obj[i].value; 
}
//cout <<"totv = " <<totv <<endl;

getMax(0,0,totv);

for (i = 0; i < SIZE; i++){
	if (opt_s[i]) { 
		w_count += obj[i].weight;
		v_count += obj[i].value;
	}
	cout <<"obj[" <<i <<"].weight = " <<obj[i].weight;
	cout <<" obj[" <<i <<"].value = " <<obj[i].value;
	cout <<" opt_s[" <<i <<"] = " <<opt_s[i] <<endl;
}
cout <<"w_count = " <<w_count;
cout <<" v_count = " <<v_count <<endl;
for (i = 0; i < SIZE; i++) {
	cout <<s[i] <<" ";
}
cout << endl;
system("pause");
return 0;
}

Link to comment
Share on other sites

Izveido kontu, vai pieraksties esošajā, lai komentētu

Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas

Izveidot jaunu kontu

Piereģistrējies un izveido jaunu kontu, tas būs viegli!

Reģistrēt jaunu kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...