Kungs Ierakstīts Novembris 22, 2010 Share Ierakstīts Novembris 22, 2010 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 More sharing options...
Recommended Posts
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 kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!