我遇到以下问题。我的main函数读取一些数据,如1 2 3 4
,并创建一个下降的整数列表4 3 2 1
。它还会读取一个整数来设置bin
,其大小为bin x bin
的{{1}}平方。
然后它确定边界是否正常。在此之后,我在包装功能方面遇到了麻烦。我的代码......
0
要添加以使其更清晰,我的函数应该采用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
等列表,并创建4x4 3x3 2x2和1x1块。例如,我创建了一个5x5 bin网格。如果我要放置4 3 2 1
,它将会是:
4321
由于它不能适合3和2,它将转到1并从顶部0开始。 同样,我的代码应该打印出未使用的0和块的数量。因此,它不需要使用最优解,只需从给定的块集合中按顺序排列。
所以当输入文件block.txt时。它按降序从文件中创建一个整数列表。 block = [4,2,1]。如果我的bin = 5 它会创建一个像
这样的网格44441
44440
44440
44440
00000
现在当4放置。 4块意味着它是一个4x4块。由于0代表开放点,它将首先放置4x4。
00000
00000
00000
00000
00000
现在它将尝试在开放0中放置一个2x2块。但是,这个区块没有空位,所以它会进入1.由于右上角的点(0)是打开的,它会将它放在那里。
44440
44440
44440
44440
44440
答案 0 :(得分:0)
问题出在isSpaceFree
的最开始。您无条件退回false
。以后从不需要的if bin[row][column] == 0: return True
删除它们,你很好
def isSpaceFree(bin, row, column, block):
if row + block > len(bin):
return False
if column + block > len(bin):
return False
else: # YOU PROBABLY DON'T WANT THIS HERE
return False #DITTO
## Nothing from here or below ever gets reached because of above commented lines
if bin[row][column] == 0 : ## you dont want this
return True ##because this is bad too and aborts and its already covered below
for r in range(row, row+block):
for c in range(column, column + block):
if bin[r][c] != 0:
return False
return True