Это вопрос о назначении школы. Нам пришлось использовать алгоритм, чтобы найти самый большой возможный прямоугольник с 0s в матрице с 0 и 1 Я выбрал алгоритм грубой силы, поскольку проблема является лишь небольшой проблемой, , но она не работает. Любая помощь/идеи?Алгоритм максимального прямоугольника
'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, и это делает. Если я увеличить это матрица 6х10 и я разместить 3х3 подматрицы с 1-х в в lowerleft угол, чем это должно дать мне 42, но только дает мне 30
0000000000
0000000000
0000000000
1110000000
1110000000
1110000000
Оффтопик: всегда используйте комментарии на английском языке. –
«Это не похоже на работу» недостаточно для того, чтобы мы могли вам помочь. Что на самом деле происходит не так? Ошибки? Неверный выход? –
Неправильный вывод, я пробовал работать с методом размера, но это на самом деле не сработало ... Проблема возникает, когда есть несколько блоков с другим размером, которые по-прежнему бесплатны (изменение моих комментариев прямо сейчас) – Pieterjan