#include #include #include #include using namespace std; const int maxVeci=40; FILE *src,*dest; int n; // pocet veci int M; // kapacita batohu int V[maxVeci]; // hmotnosti veci int C[maxVeci]; // ceny veci int nr[maxVeci]; // originalni posloupnost prvku int id; // id zadani bool maska[maxVeci]; // bitova maska pro bruteforce bool inKnap[maxVeci]; // je v batohu int knapPrice=0; // cena veci v batohu int knapWeight=0; // vaha v batohu time_t timeStart,timeEnd; class tFronta { int f,l; int fronta[maxVeci]; public: void Init(void) {f=0;l=0;} tFronta(void) {Init();} bool IsEmpty(void) {if (f==l) return true; else return false;} void Push(int a) { if (f>=maxVeci) f=0; fronta[f++]=a; } int Pop(void) { if (l>=maxVeci) l=0; return fronta[l++]; } } queue; class tStack { int f; int fronta[maxVeci]; public: void Init(void) {f=0;} tStack(void) {Init();} bool IsEmpty(void) {if (f==0) return true; else return false;} bool IsFull(void) {if (f==maxVeci) return true; else return false;} void Push(int a) {if (f0) return fronta[--f];} } stack; void BruteForceComb(int comb=0) { for (int i=0; i=i; j--) { if ((C[j]/V[j]) > (C[i]/V[i])) { tmp=V[j];V[j]=V[i];V[i]=tmp; tmp=C[j];C[j]=C[i];C[i]=tmp; tmp=nr[j];nr[j]=nr[i];nr[i]=tmp; } } } } void Greedy(void) { for (int i=0; i1) && ((!strcmp(argv[1],"bruteforce")) || (!strcmp(argv[1],"force")))) bruteForce=1; else if ((argc>1) && (!strcmp(argv[1],"greedy"))) bruteForce=0; if (bruteForce) printf("Using bruteforce....\n"); else printf("Using greedy algorythm sorted by price/weight....\n"); printf("\n"); for (int i=0; i<=99; i++) { sprintf(str,"knap_%d.txt",i); if ((src=fopen(str,"r"))==NULL) continue; sprintf(str,"output_%d.txt",i); if ((dest=fopen(str,"w"))==NULL) { fclose(src); continue; } for (int rad=0; rad<50; rad++) { knapWeight=0; knapPrice=0; // nacteni dat ze souboru fscanf(src,"%d ",&id); // id fscanf(src,"%d ",&n); // pocet veci fscanf(src,"%d ",&M); // kapacita batohu if (n>maxVeci) { printf("Warning: maxitems overloaded. Using only %d items.\n",maxVeci); n=maxVeci; } for (int j=0;j