如何将相同大小的3D矩形放入框中

时间:2018-08-17 12:37:32

标签: knapsack-problem

我正在从事一个项目,该项目要求我查找单个盒子中可以容纳的物品数量。所有项目都是相同的,具有相同的尺寸。我需要计算项目是否可堆叠和/或可翻转的数量。 我看到了很多背包算法,但都涉及不同尺寸的物品和重量。这是我的代码。堆叠允许堆叠物品,如果不可堆叠,则只能在Z轴上放置一件物品。 flip是在项目的6个方向之间切换,它以5到0开头,我每次尝试翻转并尝试放置。我的问题是物品重叠,并且没有堆叠的翻盖给出了错误的数字。感谢进阶

    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;



            }

        }
    }

0 个答案:

没有答案