Meu professor me passou o problema da mochila para programar em C++, até ai tudo bem, entendo a lógica do problema perfeitamente. Porém ele pediu para fazer a leitura de arquivos externos com os valores e pesos de cada item, com isso não estou conseguindo desenvolver o algoritmo, se alguém puder por favor me ajudar.
Segue abaixo a parte que ele já entregou desenvolvida, tenho apenas que fazer a lógica, lendo o arquivo externo.
#include <iostream>
#include <vector>
#include <string>
#include <string.h>
#include <fstream>
#include <cstdlib>
#include <cmath>
#include <bitset>
#include <time.h>
//#include "boost/dynamic_bitset.hpp"
using namespace std;
typedef struct{
int n; //total de itens
int C; //Capacidade da Mochila
std::vector <double> v; //valor dos itens
std::vector <double> p; //peso dos itens
char *name; //
time_t t_max; //tempo maximo de execucao
int it_max; //numero maximo de iterações
} DAT; //armazena os dados lidos
typedef struct{
double z; //custo total da solucao
std::bitset<100> x; //sinaliza quais itens estão presentes na solucao
} SOLUTION;
void leitura_dados(DAT &d);
void imprime_solucao(DAT d, SOLUTION s);
void help();
//funcao de ordenacao
void sort(std::vector<double> &cost, std::vector<int> &R, int tam);
void help(){
std::cout << std::endl << std::endl << "exec [data file] \n " << std::endl;
exit(1);
}
void leitura_dados(DAT &d){ //prestar atencao no &, indicando que o elemento ou variavel pode ter algum valor modificado dentro dessa funcao
//leitura do tempo
std::cout << "Digite o tempo maximo de compilacao" << std::endl;
std::cin >> d.t_max;
std::cout << "Digite o numero maximo de iteracoes" << std::endl;
std::cin >> d.it_max;
//*/
//leitura de dados
//string nname = "tsp-d01.dat";
string nname;
std::cout << "Digite o nome da instacia: " << std::endl;
std::cin >> nname;
//convertendo string para char[]
char *cname = new char[nname.length()+1];
memcpy(cname, nname.c_str(), nname.length() + 1);
d.name = cname;
//fim conversao string para char
//abertura do arquivo de dados
ifstream arq(cname);
if (!arq.is_open()) help();
//leitura dos dados
//total de itens
arq >> d.n;
std::cout << "\nn: " << d.n;
//Capacidade da Mochila
arq >> d.C;
std::cout << "\nC: " << d.C;
d.v = std::vector<double>(d.n+1, 0.0);
d.p = std::vector<double>(d.n+1, 0.0);
for (int j = 1; j <= d.n; j++){
arq >> d.v[j];
arq >> d.p[j];
std::cout << "\nj: " << j << " v: " << d.v[j] << " - p: " << d.p[j];
}
std::cout << std::endl;
arq.close();
}
void imprime_solucao(DAT d, SOLUTION s){
std::cout << "\n-------------------------------------------\nIMPRESSAO DA SOLUCAO \nProblema: " << d.name << "\ncusto: " << s.z << "\ncomposicao: " << s.x << "\nx: ";
for (int j = 1; j <= d.n; j++) if (s.x.test(j-1)) std::cout << j << " ";
std::cout << "\n-------------------------------------------\n";
}
void sort(std::vector<double> &cost, std::vector<int> &R, int tam){
int i, j, imin, iaux;
double daux;
for (i = 1; i <= tam; i++){ // para todas as posições
imin = i;
for (j = (i+1); j <= tam; j++) if(cost[j] < cost[imin]) imin = j; //avalio o valor armazenado
if (i != imin) {
daux = cost; cost = cost[imin]; cost[imin] = daux;
iaux = R; R = R[imin]; R[imin] = iaux; } } }
int main() { //leitura das informações do problema DAT d; leitura_dados(d);
//heuristica
//metaheuristica }
Caso alguém me entregue o algoritmo pronto e funcionando, entrarei em contato e recompensarei