二进制二维和包装

时间:2013-10-22 18:28:59

标签: python

我遇到以下问题。我的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

1 个答案:

答案 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