次の問題を再帰的に解決するように挑戦されましたが、まだできません。
問題: 次のセットのすべてのアイテムをパックする必要があります
int[] items = new int[] {4, 4, 2, 3};
次のボックスに
int[] boxes = new int[] {5, 8};
現時点では、私が持っているアルゴリズムの最後に
Item index: 2
Box index: 1
Items: 0, 0, 0, 3,
Boxes: 1, 2,
-------------------------------------------------
It is possible to distribute defined set of items in given boxes.
アイテム 3 があり、残りの容量が 1 と 2 の 2 つのボックスがあるため、これは正しくありません。「||」の右側から最終的な肯定的な結果が得られます。表現。
誰かが間違ったコードを示したり、正しい解決策を推奨したりできますか? ありがとう!
私のJavaコードは以下の通りです:
public class Boxes
{
public static void main(String[] args)
{
int[] items = new int[] {4, 4, 2, 3};
int[] boxes = new int[] {5, 8};
System.out.println( String.format("It is %spossible to distribute defined set of items in given boxes.", IsFit(items, boxes, 0, 0) ? "" : "NOT " ) );
}
private static boolean IsFit(int[] items, int[] boxes, int boxIndex, int itemIndex)
{
if (boxIndex == boxes.length)
return false;
if (itemIndex == items.length)
return true;
boolean result =
IsFit(items, boxes, boxIndex + 1, itemIndex)
||
IsFit(items, boxes, boxIndex, itemIndex + 1)
;
if (result)
{
int storedValue = items[itemIndex];
if (boxes[boxIndex] >= storedValue)
{
boxes[boxIndex] -= storedValue;
items[itemIndex] = 0;
/*
System.out.println( String.format("Item index: %d", itemIndex) );
System.out.println( String.format("Box index: %d", boxIndex) );
System.out.print("Items: ");
for (int i : items)
System.out.print( String.format("%s, ", i) );
System.out.println();
System.out.print("Boxes: ");
for (int b : boxes)
System.out.print( String.format("%s, ", b) );
System.out.println();
System.out.println("-------------------------------------------------");
*/
result = IsFit(items, boxes, boxIndex, itemIndex + 1);
items[itemIndex] = storedValue;
boxes[boxIndex] += storedValue;
}
}
return result;
}
}