【发布时间】:2013-05-07 02:15:38
【问题描述】:
这是一个关于学校作业的问题。 我们必须使用一种算法来找到可能的最大矩形 0 和 1 的矩阵中的 0 我选择了蛮力算法,因为问题只是一个小问题, 但它似乎不起作用。有什么帮助/想法吗?
'Determine greatest rectangle'
def determineBiggest(self):
best_ll = [0,0]
best_ur = [-1,-1]
for llx in range(0,len(self.verkaveling)):
for lly in range(0,len(self.verkaveling[0])):
for urx in range(llx, len(self.verkaveling)):
for ury in range(lly, len(self.verkaveling[0])):
if(self.grootte(llx,lly,urx,ury) > self.size(best_ll[0],best_ll[1],best_ur[0],best_ur[1])) and (self.isFree(llx,lly,urx,ury)):
best_ll[0]=llx
best_ll[1]=lly
best_ur[0]=urx
best_ur[1]=ury
print self.size(best_ll[0],best_ll[1],best_ur[0],best_ur[1])
'Determine size of rectangle'
def grootte(self,a,b,c,d):
if(a > c) or (b > d):
return 0
else:
return (c-a+1)*(d-b+1)
'Check if rectangle is fully free'
def isFree(self,a,b,c,d):
for x in range(a, c):
for y in range(b, d):
if self.verkaveling[x][y] == "0":
return False
else:
return True
来源:used source
例子:
000000
000000
000000
111000
111000
111000
这应该给出 18 并且确实如此。 如果我将其增加到 6x10 矩阵 我放置了一个 1 的 3x3 子矩阵 左下角,比那应该给我 42,但只给我 30
0000000000
0000000000
0000000000
1110000000
1110000000
1110000000
【问题讨论】:
-
离题:始终使用英文 cmets。
-
“它似乎不起作用”不足以让我们为您提供帮助。实际上出了什么问题?错误?输出不正确?
-
输出不正确,我尝试摆弄 size 方法,但这并没有真正解决...现在)
-
您可能还想提供一个小样本输入。
-
添加示例和有问题的输入
标签: python algorithm rectangles