我遇到了以下问题。我的主要功能是读取一些数据,如1 2 3 4
,并创建一个下降整数的列表4 3 2 1
。它还读入一个整数,以设置一个bin
,其大小为的bin x bin
平方。二进制二维尺寸和包装
然后它确定边界是否正常。在此之后,我遇到了包装功能问题。我的代码...
def isSpaceFree(bin, row, column, block):
if row + block > len(bin):
return False
if column + block > len(bin):
return False
else:
return False
if bin[row][column] == 0 :
return True
for r in range(row, row+block):
for c in range(column, column + block):
if bin[r][c] != 0:
return False
return True
def packing(bin, row, column, block):
if isSpaceFree(bin, row, column, block):
for r in range(row, row+block):
for c in range(column, column + block):
bin[r][c] = block
要添加到更清楚,我的功能应该采取在bin
值,例如6
并作出6x6
电网0
的。
000000
000000
000000
000000
000000
000000
下一步将采取的列表,如4 3 2 1
和创造的4x4 3x3的2x2的广告和1x1块。例如,我创建了一个5x5的bin网格。如果我把它4321
会是什么样子:
44441
44440
44440
44440
00000
由于它不适合3和2将到1,并开始从顶部0。 同样,我的代码应该打印出未使用的0和块的数量。因此,它不需要使用最佳解决方案,只需从给定的一组块中按顺序进行即可。
所以当输入文件block.txt。它以降序从文件中创建一个整数列表。块= [4,2,1]。如果我的箱子= 5 它会创建一个像
00000
00000
00000
00000
00000
网格现在,当4被放置。 4块意味着它是一个4x4块。由于0代表开放点,因此将首先放置4x4。
44440
44440
44440
44440
44440
现在它会尝试在打开的0中放置一个2×2块。然而,这个块没有开放的位置,所以它会进入1.因为右上角(0)的位置是开放的,它会将它放在那里。
44441
44440
44440
44440
44440
什么是'bin'价值?建议您先从问题开始,并在最后发布整个代码。请提供一个简短的自包含的可编译示例,说明发生了什么问题,而不是整个项目中的每一行代码。 http://sscce.org/ – UpAndAdam
我已更新它。 BIN基本上是一个网格。例如,如果我将5作为BIN,它将创建一个5x5的零网格。边界将是5.如果行+块> 5,那么它不应该放置任何东西并返回False。 – user2908101
我遇到的代码部分是打包函数,我实际上将列表块中的值放入。所以如果我的block = [4,3,2,1]它会以一个4x4块开始并放入,然后它会检查它是否可以放置一个3x3,2x3和1x1。如果它不能放置一个3x3和一个2x2,它会告诉我,2和3不能放置,剩下零的数量。 – user2908101