Problema de embalaje, algoritmos codiciosos buscan una solución óptima aproximada
La copia del código es la siguiente:
importar java.util.arrays;
importar java.util.comparator;
// Problema de embalaje, algoritmo codicioso
clase pública Enchase {
public void test1 () {
Integer [] cajas = {34,6,40,2,23,12,12};
int boxcaptation = 40; // Capacidad de caja
// orden inverso
Arrays.sort (casillas, nuevo comparador <integer> () {
@Anular
public int Compare (Integer O1, Integer O2) {
regresar O2-O1;
}
});
int unenchase = boxs.length; // número de unboxed
int minIndex = boxs.length-1; // El cuadro más pequeño apunta a
while (unenchase> 0) {
para (int i = 0; i <boxs.length; i ++) {
// El peso del cuadro de posición es cero omitir
if (boxs [i] == 0) {
continuar;
}
unenchase--;
while ((boxcaptation-boxs [i])> = boxs [minindex]) {
int k = i+1;
para (; k> i; k ++) {
// El peso del cuadro de posición es cero omitir
if (boxs [k] == 0) {
continuar;
}
// Agregar la caja y borrar la posición original
cajas [i]+= cajas [k];
int temp = boxs [k];
cajas [k] = 0;
unenchase--;
if (boxs [i]> boxcaptation) {
// se puede exceder la capacidad máxima, el estado se restaurará
unenchase ++;
cajas [k] = temp;
cajas [i]-= cajas [k];
continuar;
}
// Actualización mínima de cuadro
if (k == minindex) {
para (int y = minindex; y> 0; y-) {
if (boxs [y]! = 0) {
minindex = y;
}
}
}
romper;
}
}
}
}
// Cuenta el número de cajas
int boxcount = 0;
System.out.println ("Resultado del boxeo:");
para (int i = 0; i <boxs.length; i ++) {
System.out.print (casillas [i]+"/t");
if (boxs [i] == 0) {
continuar;
}
Boxcount ++;
}
System.out.println ("/nnumnumber of boxes:"+boxcount);
}
public static void main (string [] args) {
nuevo Enchase (). Test1 ();
}
}
Lo anterior se trata de este artículo, espero que les guste.