我遇到了以下問題。我的主要功能是讀取一些數據,如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