knapsack-problem - 如何将相同尺寸的 3d 矩形物品放入盒子中
问题描述
我正在做一个项目,该项目需要我找到可以装在一个盒子里的物品数量。所有项目都相同,尺寸相同。我需要计算物品是否可堆叠和/或可翻转的数量。我看到了很多背包算法,但都是关于不同尺寸和重量的物品。这是我的代码。堆叠允许堆叠物品,如果不可堆叠,则只能将一件物品放置在 Z 轴上。翻转正在从 5 到 0 开始的项目的 6 个方向之间切换,我每次都尝试翻转并尝试放置。我的问题是重叠的项目和没有堆栈的翻转给出错误的数字。提前谢谢
private int Calculate(int X,int Y,int Z,int Xb,int Yb,int Zb,Boolean stack,int flip)
{
int result = 0;
if ((X > Xb || Y > Yb || Z > Zb )&& flip == 0) { return 0; }
else
{
int Xc=0,Xr=0,Yc=0,Yr=0,Zc=0,Zr = 0;
Xc = Xb / X;
Xr = Xb % X;
Yc = Yb / Y;
Yr = Yb % Y;
if (stack)
{
Zc = Zb / Z;
Zr = Zb % Z;
}
if (stack) {
result= Zc * Xc * Yc;
}
else {
//Seq.Text += "no stack";
result= Xc * Yc;
}
if (result > 0) Seq.Text += result+" flip "+flip+" ";
if (flip == 0)
return result;
else
{
int flip2 = --flip;
if (flip2 == 4 || flip2 == 2 || flip2 == 0)
{ int x = Calculate(X, Z, Y, Xb, Yr, Zb, stack, flip2) + Calculate(X, Z, Y, Xr, Yb, Zb, stack, flip2) + Calculate(X, Z, Y, Xb, Yb, Zr, stack, flip2);
return result + x;
}
else if (flip2 == 3)
{ int x= Calculate(Z, X, Y, Xr, Yb, Zb, stack, flip2) + Calculate(Z, X, Y, Xb, Yr, Zb, stack, flip2) + Calculate(Z, X, Y, Xb, Yb, Zr, stack, flip2);
return result + x;
}
else if (flip2 == 1)
{
int x = Calculate(Y, Z, X, Xb, Yr, Zb, stack, flip2) + Calculate(Y, Z, X, Xb, Yb, Zr, stack, flip2) + Calculate(Y, Z, X, Xr, Yb, Zb, stack, flip2);
return result + x;
}
else return 0;
}
}
}
解决方案
推荐阅读
- python - fsolve 对任何方程组都有用吗?
- r - 尽管测试集的预测很低,但可以使用 R 中的 randomForest 来确定变量重要性吗?
- windows - 通过命令行以人类可读的格式导出 DB2 模式?
- php - 查看所有存在的帐户中的特定帐户时显示特定的用户信息
- r - 重新格式化强制转换为数据框的包装数据?(右)
- vue.js - Vue Js Axios 获取方法
- nginx - NGINX 禁用特定位置的身份验证
- winforms - 运行多个脚本实例
- cobol - INITIALIZE 在 PIC X 和 PIC S9 COMP 变量上给出垃圾值
- android - UART 通信不适用于默认图像 Android Things