Problema de embalagem, algoritmos gananciosos buscam solução ideal aproximada
A cópia do código é a seguinte:
importar java.util.arrays;
importar java.util.comparator;
// Problema de embalagem, algoritmo ganancioso
classe pública Enchase {
public void test1 () {
Inteiro [] caixas = {34,6,40,2,23,12,12};
int boxCapation = 40; // Capacidade da caixa
// Ordem inversa
Arrays.sort (caixas, novo comparador <Teger> () {
@Override
public int compare (Inteiro O1, Inteiro O2) {
retornar o2-o1;
}
});
int uNEnchase = boxs.length; // Número de não caixas
int minindex = boxs.length-1; // a menor caixa aponta para
while (UNENHASE> 0) {
for (int i = 0; i <boxs.length; i ++) {
// O peso da caixa de posição é zero pular
if (caixas [i] == 0) {
continuar;
}
UNENCHASE--;
while ((boxcapation-boxs [i])> = caixas [minindex]) {
int k = i+1;
para (; k> i; k ++) {
// O peso da caixa de posição é zero pular
if (caixas [k] == 0) {
continuar;
}
// Adicione a caixa e limpe a posição original
caixas [i]+= caixas [k];
int temp = caixas [k];
caixas [k] = 0;
UNENCHASE--;
if (caixas [i]> boxcaptation) {
// A capacidade máxima pode ser excedida, o status será restaurado
UNENCHASE ++;
caixas [k] = temp;
caixas [i]-= caixas [k];
continuar;
}
// Atualização mínima de caixa
if (k == minindex) {
for (int y = minindex; y> 0; y-) {
if (caixas [y]! = 0) {
minindex = y;
}
}
}
quebrar;
}
}
}
}
// Conte o número de caixas
int boxCount = 0;
System.out.println ("resultado do boxe:");
for (int i = 0; i <boxs.length; i ++) {
System.out.print (caixas [i]+"/t");
if (caixas [i] == 0) {
continuar;
}
BoxCount ++;
}
System.out.println ("/nnumber of boxes:"+boxcount);
}
public static void main (string [] args) {
new Enchase (). Test1 ();
}
}
O exposto acima é tudo sobre este artigo, espero que gostem.