포장 문제, 욕심 많은 알고리즘은 대략적인 최적 솔루션을 찾습니다
코드 사본은 다음과 같습니다.
import java.util.arrays;
import java.util.comparator;
// 포장 문제, 욕심 많은 알고리즘
공개 클래스 Enchase {
public void test1 () {
정수 [] 상자 = {34,6,40,2,23,12,12};
int boxcaptation = 40; // 박스 용량
// 역 순서
arrays.sort (Boxs, New Comparator <integer> () {
@보수
public int 비교 (정수 O1, Integer O2) {
반환 O2-O1;
}
});
int unenchase = boxs.length; // unboxed 수
int minindex = boxs.length-1; // 가장 작은 상자가 가리 킵니다
while (unenchase> 0) {
for (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]+= 상자 [k];
int temp = 상자 [k];
상자 [k] = 0;
Unenchase--;
if (boxs [i]> boxcaptation) {
// 최대 용량을 초과 할 수 있고 상태가 복원됩니다.
Unenchase ++;
상자 [k] = 온도;
상자 [i]-= 상자 [k];
계속하다;
}
// 최소 상자 업데이트
if (k == minindex) {
for (int y = minindex; y> 0; y-) {
if (boxs [y]! = 0) {
minindex = y;
}
}
}
부서지다;
}
}
}
}
// 상자 수를 계산하십시오
int boxcount = 0;
System.out.println ( "권투 결과 :");
for (int i = 0; i <boxs.length; i ++) {
System.out.print (상자 [i]+"/t");
if (boxs [i] == 0) {
계속하다;
}
BoxCount ++;
}
System.out.println ( "/nnumber of boxes :"+boxcount);
}
public static void main (String [] args) {
new Enchase (). test1 ();
}
}
위의 것은이 기사에 관한 모든 것입니다. 나는 당신이 그것을 좋아하기를 바랍니다.