goloso.cpp 1.38 KB
Newer Older
1 2 3 4
#include "goloso.h"


PathList Goloso::operator()(const Instance& instance) const { 
5
	PathList rutas;
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
	int n = instance.size();
	vector<Node> nodos = instance.getNodes();
	MatrizDist dist = instance.getDistances();
	vector<bool> visitados(n, false); 
	int cant_nodos = 1;
	int costo = 0;
	int carga;
	int indice_min, min, i;
	int C = instance.getCapacity();


	while(cant_nodos < n){
		vector<int> camino;
		carga = 0;
		indice_min = 0;
		min = 0;
		while(((carga + nodos[indice_min].demand) <= C) && (cant_nodos < n)){ 
			carga += nodos[indice_min].demand;
			camino.push_back(indice_min);
			visitados[indice_min] = true;
			costo += min; 
		
			if(indice_min != 0) cant_nodos++;   //Para no sumar el cero cada vez
			min = INT_MAX;
			i = indice_min;

			for(int j=0; j<n; j++){
				if(i != j && !visitados[j] && dist[i][j] < min){
					min = dist[i][j];
					indice_min = j;

				}
			}
		} 
	
		costo += dist[camino.back()][0];
		camino.push_back(0);
43
		rutas.first.push_back(camino);
44 45
	
	}
46 47 48 49
		
		rutas.second = costo;
		return rutas;
		
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
		/*Salida de Prueba*/
		/*cout << rutas.size() << endl;
		for(int i= 0; i<rutas.size();i++){
			for(int j= 0; j<rutas[i].size();j++){
			cout << rutas[i][j] << " " ;

			}
			cout << endl;
		}
		cout << costo <<endl;*/

}

//printear: 	cantidad de camiones rutas.size() 
//		caminos separados por una linea    for para cada camino de rutas
//		costo_total : costo