Nodo Generar(Nodo & actual, bool eleccion, double pesoM, const multiset<Elemento> & Originalobjs){ Nodo res = Nodo(0, 0, 0, actual.nivel+1, 0, 0, actual.tupla); multiset<Elemento> objs(Originalobjs); multiset<Elemento>::const_reverse_iterator obj_it = Originalobjs.crbegin(); multiset<Elemento>::iterator otro; for (int k=0; k<=res.nivel && obj_it != objs.crend(); k++){ otro = objs.end();--otro; // esto va borrando elementos hasta que nos objs.erase(otro); ++obj_it; } --obj_it; res.tupla.at(res.nivel) = eleccion; if (!eleccion) { res.valor_actual = actual.valor_actual; res.peso_actual = actual.peso_actual; } else{ res.valor_actual = actual.valor_actual + (*obj_it).beneficio; res.peso_actual = actual.peso_actual + (*obj_it).peso; } res.CI =res.BE = res.valor_actual+Greedy01(objs, (pesoM - res.peso_actual)); res.CS = res.valor_actual+ceil(GreedyFraccional((pesoM - res.peso_actual), objs)); if (res.peso_actual > pesoM) { res.CI = numeric_limits<double>::min(); res.CS = numeric_limits<double>::min(); res.BE = numeric_limits<double>::min(); res.valor_actual = res.BE; } return res; }