#include <stdlib.h>
#include <time.h>
#include <stdio.h>
int Aleatorio(int n, int qt, int *maior,int *capacidade,int *somaPeso, int *somaBeneficio,int *solucao[],int *melhorSolucao[], int peso[], int beneficio[] ){
srand( (unsigned)time(NULL));
*somaBeneficio = 0;
*somaPeso = 0;
// Condição de parada //
if(qt == 10){
return 0;
}
// Preenche mochila com valores aleatorios entre 0 e 1 //
for(int i = 0; i<n;i++){
*solucao[i] = rand() % 2;
if (*solucao[i] == 1){
*somaBeneficio = *somaBeneficio + beneficio[i];
*somaPeso = *somaPeso + peso[i];
}
}
// Verifica se essa solução é viavel //
if(*somaBeneficio > *maior && *somaPeso <= *capacidade){
*maior = *somaBeneficio;
for(int b = 0; b<n;b++){
*melhorSolucao[b] = *solucao[b];
}
}
Aleatorio(n,++qt,maior,capacidade,somaPeso,somaBeneficio,solucao,melhorSolucao,peso,beneficio);
}
int main()
{
int somaPeso = 0;
int somaBeneficio = 0;
int maior = 0;
int capacidade = 15;
// int peso[15] = {4,5,2,7,9,4,5,3,5,8,1,3,5,5,7};
// int beneficio[15] = {3,6,1,3,8,3,6,4,2,4,7,5,4,6,7};
int peso[5] = {12,1,4,1,2};
int beneficio[5] = {4,2,10,1,2};
int *solucao = (int*) malloc(sizeof(int)*5);
int *melhorSolucao = (int*) malloc(sizeof(int)*5);
Aleatorio(5,0, &maior,&capacidade, &somaPeso, &somaBeneficio, &solucao, &melhorSolucao,peso,beneficio );
// printf("Peso: %d ",somaPeso);
printf("beneficio: %d ",maior);
printf("Melhor Solução [%d, %d, %d, %d, %d]",melhorSolucao[0],melhorSolucao[1],melhorSolucao[2],
melhorSolucao[3],melhorSolucao[4]);
return 0;
}