ปัญหาการบรรจุอัลกอริทึมโลภค้นหาวิธีแก้ปัญหาที่ดีที่สุดโดยประมาณ
การคัดลอกรหัสมีดังนี้:
นำเข้า Java.util.Arrays;
นำเข้า Java.util.Comparator;
// ปัญหาการบรรจุ, อัลกอริทึมโลภ
ชั้นเรียนสาธารณะ enchase {
โมฆะสาธารณะ test1 () {
จำนวนเต็ม [] boxes = {34,6,40,2,23,12,12};
int boxcaptation = 40; // ความจุกล่อง
// คำสั่งผกผัน
array.sort (กล่อง, ตัวเปรียบเทียบใหม่ <integer> () {
@Override
INT Public Compare (Integer O1, Integer O2) {
กลับ O2-O1;
-
-
int unenchase = boxs.length; // จำนวนของ Unboxed
int minindex = boxs.length-1; // จุดกล่องที่เล็กที่สุด
ในขณะที่ (unenchase> 0) {
สำหรับ (int i = 0; i <boxs.length; i ++) {
// น้ำหนักของกล่องตำแหน่งเป็นศูนย์ข้าม
if (boxs [i] == 0) {
ดำเนินการต่อ;
-
unenchase-;
ในขณะที่ ((boxcaptation-boxs [i])> = กล่อง [minindex]) {
int k = i+1;
สำหรับ (; k> i; k ++) {
// น้ำหนักของกล่องตำแหน่งเป็นศูนย์ข้าม
if (boxs [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-) {
if (boxs [y]! = 0) {
minindex = y;
-
-
-
หยุดพัก;
-
-
-
-
// นับจำนวนกล่อง
int boxCount = 0;
System.out.println ("ผลการชกมวย:");
สำหรับ (int i = 0; i <boxs.length; i ++) {
System.out.print (กล่อง [i]+"/t");
if (boxs [i] == 0) {
ดำเนินการต่อ;
-
BoxCount ++;
-
System.out.println ("/nnumber of Boxes:"+BoxCount);
-
โมฆะคงที่สาธารณะหลัก (สตริง [] args) {
ใหม่ enchase (). test1 ();
-
-
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่าคุณจะชอบ