Проблема упаковки, жадные алгоритмы ищут приблизительного оптимального решения
Кода -копия выглядит следующим образом:
импортировать java.util.arrays;
Импорт java.util.comparator;
// Проблема упаковки, жадный алгоритм
публичный класс Enchase {
public void test1 () {
Integer [] boxes = {34,6,40,2,23,12,12};
int boxcaptation = 40; // емкость коробки
// обратный порядок
Arrays.sort (Boxs, новый компаратор <Integer> () {
@Override
public int compare (Integer O1, Integer O2) {
вернуть O2-O1;
}
});
int unichase = boxs.length; // количество распаковки
int minindex = boxs.length-1; // Наименьшая коробка указывает на
while (unichase> 0) {
для (int i = 0; i <boxs.length; i ++) {
// Вес ящика для положения нулевой пропуск
if (boxs [i] == 0) {
продолжать;
}
Unenchase--;
while ((boxcaptation-boxs [i])> = boxs [minindex]) {
int k = i+1;
for (; k> i; k ++) {
// Вес ящика для положения нулевой пропуск
if (boxs [k] == 0) {
продолжать;
}
// Добавить коробку и очистить исходную позицию
коробки [i]+= boxs [k];
int temp = boxs [k];
коробки [k] = 0;
Unenchase--;
if (boxs [i]> boxcaptation) {
// максимальная емкость может быть превышена, статус будет восстановлен
unichase ++;
коробки [k] = темп;
коробки [i]-= boxs [k];
продолжать;
}
// Минимальное обновление полета
if (k == minindex) {
for (int y = minindex; y> 0; y-) {
if (boxs [y]! = 0) {
minindex = y;
}
}
}
перерыв;
}
}
}
}
// Считайте количество коробок
int boxcount = 0;
System.out.println («Результат бокса:»);
для (int i = 0; i <boxs.length; i ++) {
System.out.print (Boxs [i]+"/T");
if (boxs [i] == 0) {
продолжать;
}
BoxCount ++;
}
System.out.println ("/nnumber of ящиков:"+boxcount);
}
public static void main (string [] args) {
new Enchase (). test1 ();
}
}
Выше приведено в этой статье, надеюсь, вам понравится.