J'ai été mis au défi de résoudre le problème suivant de manière récursive, mais je ne le peux toujours pas.Emballage d'un ensemble de boîtes avec un algorithme récursif
Le problème: Il est nécessaire d'emballer tous les éléments de ce qui suit mis
int[] items = new int[] {4, 4, 2, 3};
dans les cases suivantes
int[] boxes = new int[] {5, 8};
Au moment, à la fin de l'algorithme je
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.
Ce qui n'est pas correct, car il y a un élément 3 et il y a deux boîtes avec ca restant pacité 1 et 2. Le résultat positif final que je reçois du côté droit du "||" expression.
Quelqu'un pourrait-il indiquer le mauvais code ou recommander une bonne solution? Merci!
Mon code java est ci-dessous:
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;
}
}
Pouvez-vous indiquer clairement ce que le défi actuel est? – matcheek
Cela signifie-t-il que les objets doivent être distribués dans les cases de façon à ce que tous les objets et toutes les cases soient à 0 à la fin de la course. Ou est-ce que cela veut dire "Il n'est PAS possible de distribuer ..." puisqu'il y a encore des objets et des espaces vides? – ghdalum
Il est nécessaire de dire s'il est possible de répartir tous les articles disponibles dans des boîtes données. –