我想爲2d bin包裝做一個FNF算法,當我調用方法時,我得到錯誤的結果。請幫忙,我找不到問題。C#算法難題 - bin包裝
private void FFF()
{
int xmax = 0;
int movex = 0;
int movey = 0;
int maxH = RectBin.Height;
int maxW = RectBin.Width;
List<Rectangle> rectsToDraw = new List<Rectangle>();
for (int i = 0; i < Shapes.Count; i++)
{
int height = Shapes[i].Height;
int width = Shapes[i].Width;
if ((movey + height) <= maxH)
{
rectsToDraw.Add(new Rectangle(movex, movey, width, height));
movey = movey + height;
if (xmax < movex + width)
{
xmax = movex + width;
}
}
else if ((xmax + width) <= maxW)
{
movex = xmax;
rectsToDraw.Add(new Rectangle(movex, 0, width, height));
movey = height;
xmax = movex + width;
}
else
{
Debug.Write("Message1");
break;
}
}
for (int j = 0; j < rectsToDraw.Count; j++)
{
Debug.Write(rectsToDraw[0]);
}
r2d = rectsToDraw;
}
rectBin是一個公共矩形(0,0,300,190),而Shapes []是一個公共矩形列表。我有點形狀在這裏用它由前:
private void button9_Click(object sender, EventArgs e)
{
Shapes.Sort((x,y) => ((y.Width.CompareTo(x.Width))));
}
當我開始FNF在調試控制檯我得到重複列表項和MESSAGE1(第一個在形狀,這不應該重複),當我應該得到14個項目。
只是要清楚,我不是在尋找算法,只是有人告訴我在哪裏犯了一個錯誤,以便oblici中的第一項被4次壓縮到rectsToDraw中,循環結束...輸入:{X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 167,高度= 61} {X = 0,Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 130,高度= 40} {X = 0,Y = 0,寬度= 119,高度= 39} {X = 0,Y = 0,寬度= 115,高度= 52} {X = 0,Y = 0,寬度= 72,高度= 53} {X = 0,Y = 0,寬度= 58,高度= 46} {X = 0,Y = 0 ,寬度= 47,高度= 32} {X = 0,Y = 0,寬度= 41,高度= 47} {X = 0,Y = 0,寬度= 38,高度= 47} {X = 0,Y = 0,寬度= 33,高度= 45} {X = 0,Y = 0,寬度= 22,高度= 39} {X = 0,Y = 0,寬度= 0,高度= 0}
輸出: {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 167,高度= 61 } {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 167,高度= 61} {X = 0,Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 167,高度= 61} {X = 0,Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 130,高度= 40} {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 167,高度= 61} {X = 0,Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 130,高度= 40} {X = 0,Y = 0,寬度= 119,高度= 39} {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 167,高度= 61} {X = 0,Y = 0,寬度= 151 ,高度= 47} {X = 0,Y = 0,寬度= 130,高度= 40} {X = 0,Y = 0,寬度= 119,高度= 39} {X = 0,Y = 0,寬度= 115,高度= 52} {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 167,高度= 61} {X = 0,Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 130,高度= 40} {X = 0,Y = 0,寬度= 119,高度= 39} {X = 0,Y = 0,寬度= 115,高度= 52} {X = 0,Y = 0,寬度= 72,高度= 53} {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0 ,寬度= 167,高度= 61} {X = 0,Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 130,高度= 40} {X = 0,Y = 0,寬度= 119,高度= 39} {X = 0,Y = 0,寬度= 115,高度= 52} {X = 0,Y = 0,寬度= 72,高度= 53} {X = 0,Y = 0,寬度= 58,高度= 46} {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 167,高度= 61} {X = 0, Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 130,高度= 40} {X = 0,Y = 0,寬度= 119,高度= 39} {X = 0 ,Y = 0,寬度= 115,高度= 52} {X = 0,Y = 0,寬度= 72,高度= 53} {X = 0,Y = 0,寬度= 58,高度= 46} {X = 0,Y = 0,寬度= 47,高度= 32} {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 1 67,高度= 61} {X = 0,Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 130,高度= 40} {X = 0,Y = 0,寬度= 119,高度= 39} {X = 0,Y = 0,寬度= 115,高度= 52} {X = 0,Y = 0,寬度= 72,高度= 53} {X = 0,Y = 0,寬度= 58,高度= 46} {X = 0,Y = 0,寬度= 47,高度= 32} {X = 0,Y = 0,寬度= 41,高度= 47} {X = 0,Y = 0 ,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 167,高度= 61} {X = 0,Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 130,高度= 40} {X = 0,Y = 0,寬度= 119,高度= 39} {X = 0,Y = 0,寬度= 115,高度= 52} {X = 0,Y = 0,寬度= 72,高度= 53} {X = 0,Y = 0,寬度= 58,高度= 46} {X = 0,Y = 0,寬度= 47,高度= 32} {X = 0, Y = 0,寬度= 41,高度= 47} {X = 0,Y = 0,寬度= 38,高度= 47} {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0 ,Y = 0,寬度= 167,高度= 61} {X = 0,Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 130,高度= 40} {X = 0,Y = 0,寬度= 119,高度= 39} {X = 0,Y = 0,寬度= 115,高度= 52} {X = 0,Y = 0,寬度= 72,高度= 53} {X = 0,Y = 0,寬度= 58,高度= 46} {X = 0,Y = 0,寬度= 47,高度= 32} {X = 0,Y = 0,寬度= 41,高度= 47} { X = 0,Y = 0,寬度= 38,高度= 47} {X = 0,Y = 0,寬度= 33,高度= 45} {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 167,高度= 61} {X = 0,Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 1 30,高度= 40} {X = 0,Y = 0,寬度= 119,高度= 39} {X = 0,Y = 0,寬度= 115,高度= 52} {X = 0,Y = 0,寬度= 72,高度= 53} {X = 0,Y = 0,寬度= 58,高度= 46} {X = 0,Y = 0,寬度= 47,高度= 32} {X = 0,Y = 0,寬度= 41,高度= 47} {X = 0,Y = 0,寬度= 38,高度= 47} {X = 0,Y = 0,寬度= 33,高度= 45} {X = 0,Y = 0 ,寬度= 22,高度= 39} {X = 0,Y = 0,寬度= 231,高度= 66} {X = 0,Y = 0,寬度= 167,高度= 61} {X = 0,Y = 0,寬度= 151,高度= 47} {X = 0,Y = 0,寬度= 130,高度= 40} {X = 0,Y = 0,寬度= 119,高度= 39} {X = 0,Y = 0,寬度= 115,高度= 52} {X = 0,Y = 0,寬度= 72,高度= 53} {X = 0,Y = 0,寬度= 58,高度= 46} {X = 0, Y = 0,寬度= 47,高度= 32} {X = 0,Y = 0,寬度= 41,高度= 47} {X = 0,Y = 0,寬度= 38,高度= 47} {X = 0 ,Y = 0,寬度= 33,高度= 45} {X = 0,Y = 0,寬度= 22,高度= 39} {X = 0,Y = 0,寬度= 0,高度= 0}
'visina'的價值是什麼? 'maxV'? 'max?'? – rsbarro
visina是當前矩形的高度,maxV = 190,maxŠ= 350 – user1649498
如果在代碼中不將英語與克羅地亞/塞爾維亞語混合,也許會更容易回答你的問題:) –