W skrócie: pisząc zachłanny algorytm rozwiązujący problem plecakowy mój program wyrzuca błąd. Właściwie nie wiem skąd on się bierze, na początku wyczytałam w internecie że to nieprawidłowe zwalnianie pamięci może powodować, ale za bardzo nie wiem co tutaj jest nie tak... (?)
Gdyby ktoś był tak miły i miałby chęć na to spojrzeć to byłabym bardzo wdzięczna!
#include <stdio.h>
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
using namespace std;
struct przedmiot
{
int waga;
int wartosc;
double stosunek;
};
int compare2(const void * a, const void * b)
{
przedmiot *orderA = (przedmiot *)a;
przedmiot *orderB = (przedmiot *)b;
if (orderB->stosunek > orderA->stosunek)
{
return 1;
}
if (orderB->stosunek < orderA->stosunek)
{
return -1;
}
return 0;
}
int zachlanny(int W, int w[], int p[], int n, int sum = 0, int waga = 0)
{
int i;
przedmiot *przedmioty = new przedmiot[n];
for (i = 0; i < n; i++);
{
cout<<p[i]<<" "<<w[i]<<endl;
przedmioty[i].stosunek = (double)p[i] / (double)w[i];
cout<<przedmioty[i].stosunek<<" to stosunek"<<endl;
przedmioty[i].waga = w[i];
przedmioty[i].wartosc = p[i];
}
qsort(przedmioty, n, sizeof(przedmiot), compare2);
int a = 0;
while (waga <= W && a < n)
{
if (waga + przedmioty[a].waga <= W)
{
waga += przedmioty[a].waga;
sum += przedmioty[a].wartosc;
cout<<"waga to: "<<waga<<" a suma to: "<<sum<<endl;
}
a++;
}
cout << "Zachlanny: " << sum << endl;
return 0;
}
int compare(const void * a, const void * b)
{
return (*(int*)a - *(int*)b);
}
int main()
{
srand(time(0));
int n = rand() % 10 + 1;
int W = rand() % 50 + 1;
cout << "W to: " << W << endl;
int* val = new int[n];
int* wt = new int[n];
for (int i = 0; i < n; i++)
{
val[i] = rand() % 20 + 1;
wt[i] = rand() % 20 + 1;
}
qsort(wt, n, sizeof(int), compare);
for (int i = 0; i < n; i++)
{
cout<<"wart: "<<val[i]<<" waga: "<<wt[i]<<endl;
}
zachlanny(W, wt, val, n);
//system("pause");
return 0;
}
Wygląda na to, że moje tablice nie wczytują się poprawnie do funkcji :| dlaczego?