مشكلة التعبئة ، الخوارزميات الجشع تسعى إلى الحل الأمثل التقريبي
نسخة الكود كما يلي:
استيراد java.util.arrays ؛
استيراد java.util.comparator ؛
// مشكلة التعبئة ، خوارزمية الجشع
Enchase الطبقة العامة {
public void test1 () {
integer [] boxes = {34،6،40،2،23،12،12} ؛
int boxcaptation = 40 ؛ // box سعة
// ترتيب عكسي
arrays.sort (مربعات ، مقارن جديد <integer> () {
@تجاوز
Public Int Compare (Integer O1 ، Integer O2) {
إرجاع O2-O1 ؛
}
}) ؛
int unenchase = boxs.length ؛ // عدد غير المربع
int minindex = boxs.length-1 ؛ // أصغر مربع يشير إلى
بينما (unenchase> 0) {
لـ (int i = 0 ؛ i <boxs.length ؛ i ++) {
// وزن مربع الموضع هو صفر تخطي
إذا (مربعات [i] == 0) {
يكمل؛
}
unenchase-- ؛
بينما ((boxcaptation-boxs [i])> = boxs [minindex]) {
int k = i+1 ؛
لـ (؛ k> i ؛ k ++) {
// وزن مربع الموضع هو صفر تخطي
if (مربعات [k] == 0) {
يكمل؛
}
// أضف المربع وقم بمسح الموضع الأصلي
مربعات [i]+= مربعات [k] ؛
int temp = boxs [k] ؛
الصناديق [k] = 0 ؛
unenchase-- ؛
if (boxs [i]> boxCaptation) {
// يمكن تجاوز الحد الأقصى للسعة ، وسيتم استعادة الحالة
unenchase ++ ؛
الصناديق [k] = درجة الحرارة ؛
الصناديق [i]-= مربعات [k] ؛
يكمل؛
}
// تحديث مربع الحد الأدنى
if (k == minindex) {
لـ (int y = minindex ؛ y> 0 ؛ y-) {
إذا (مربعات [y]! = 0) {
minindex = y ؛
}
}
}
استراحة؛
}
}
}
}
// عد عدد الصناديق
int boxcount = 0 ؛
System.out.println ("نتيجة الملاكمة:") ؛
لـ (int i = 0 ؛ i <boxs.length ؛ i ++) {
system.out.print (boxs [i]+"/t") ؛
إذا (مربعات [i] == 0) {
يكمل؛
}
boxcount ++ ؛
}
System.out.println ("/nnumber of boxes:"+boxCount) ؛
}
الفراغ الثابت العام الرئيسي (سلسلة [] args) {
new Enchase (). test1 () ؛
}
}
ما سبق هو كل شيء عن هذا المقال ، أتمنى أن تنال إعجابك.