Masalah pengemasan, algoritma serakah mencari perkiraan solusi optimal
Salinan kode adalah sebagai berikut:
impor java.util.arrays;
impor java.util.comparator;
// Masalah pengepakan, algoritma serakah
Enchase kelas publik {
public void test1 () {
Integer [] box = {34,6,40,2,23,12,12};
int boxcaptation = 40; // kapasitas kotak
// urutan terbalik
Arrays.sort (kotak, pembanding baru <integer> () {
@Mengesampingkan
Public int Compare (Integer O1, Integer O2) {
mengembalikan O2-O1;
}
});
int unenchase = boxs.length; // jumlah unboxed
int minindex = boxs.length-1; // kotak terkecil menunjuk ke
while (unenchase> 0) {
untuk (int i = 0; i <boxs.length; i ++) {
// Berat kotak posisi adalah nol lewati
if (boxs [i] == 0) {
melanjutkan;
}
unenchase--;
while ((boxcaptation-boxs [i])> = boxs [minIndex]) {
int k = i+1;
untuk (; k> i; k ++) {
// Berat kotak posisi adalah nol lompatan
if (boxs [k] == 0) {
melanjutkan;
}
// Tambahkan kotak dan bersihkan posisi aslinya
kotak [i]+= kotak [k];
int temp = kotak [k];
kotak [k] = 0;
unenchase--;
if (boxs [i]> boxcaptation) {
// Kapasitas maksimum dapat dilampaui, statusnya akan dipulihkan
unenchase ++;
kotak [k] = temp;
kotak [i]-= kotak [k];
melanjutkan;
}
// Pembaruan Kotak Minimum
if (k == minindex) {
untuk (int y = minindex; y> 0; y-) {
if (kotak [y]! = 0) {
minindex = y;
}
}
}
merusak;
}
}
}
}
// Hitung jumlah kotak
int boxcount = 0;
System.out.println ("Hasil tinju:");
untuk (int i = 0; i <boxs.length; i ++) {
System.out.print (kotak [i]+"/t");
if (boxs [i] == 0) {
melanjutkan;
}
Boxcount ++;
}
System.out.println ("/nnumber of box:"+boxcount);
}
public static void main (string [] args) {
enchase baru (). test1 ();
}
}
Di atas adalah semua tentang artikel ini, saya harap Anda menyukainya.