Problème d'emballage, les algorithmes gourmands recherchent une solution optimale approximative
La copie de code est la suivante:
import java.util.arrays;
Importer java.util.comparator;
// Problème d'emballage, algorithme gourmand
classe publique Enchase {
public void test1 () {
Boxes entier [] = {34,6,40,2,23,12,12};
int BoxCaptation = 40; // Capacité de la boîte
// Ordre inverse
Arrays.sort (boîtes, nouveau comparateur <Integer> () {
@Outrepasser
public int compare (entier o1, entier o2) {
retour O2-O1;
}
});
int unenchase = boxs.length; // nombre de non-boîte
int minindex = boxs.length-1; // la plus petite boîte pointe vers
while (unenchase> 0) {
for (int i = 0; i <boxs.length; i ++) {
// Le poids de la boîte de position est zéro skip
if (boxs [i] == 0) {
continuer;
}
Unenchase--;
while ((boxCaptation-boxs [i])> = boxs [minindex]) {
int k = i + 1;
pour (; k> i; k ++) {
// Le poids de la boîte de position est zéro skip
if (boxs [k] == 0) {
continuer;
}
// Ajouter la boîte et effacer la position d'origine
Boxes [i] + = Boxs [k];
int temp = boxs [k];
boîtes [k] = 0;
Unenchase--;
if (boxs [i]> boxcaptation) {
// La capacité maximale peut être dépassée, le statut sera restauré
Unenchase ++;
Boîtes [k] = temp;
boxes [i] - = boxs [k];
continuer;
}
// Mise à jour minimale de la boîte
if (k == minindex) {
pour (int y = minindex; y> 0; y -) {
if (boxs [y]! = 0) {
minindex = y;
}
}
}
casser;
}
}
}
}
// compte le nombre de boîtes
int boxCount = 0;
System.out.println ("Résultat de boxe:");
for (int i = 0; i <boxs.length; i ++) {
System.out.print (Boxs [i] + "/ t");
if (boxs [i] == 0) {
continuer;
}
BoxCount ++;
}
System.out.println ("/ nnumber de boîtes:" + boxCount);
}
public static void main (String [] args) {
new Enchase (). test1 ();
}
}
Ce qui précède est tout sur cet article, j'espère que vous l'aimez.