이것은 학교 과제와 관련된 질문입니다. 가장 큰 사각형을 찾기 위해 알고리즘을 사용해야했습니다. 행렬에서 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 매트릭스 으로 증가하고 난 에 lowerleft 코너를 하나의와 3 × 3 행렬을 배치하면 , 그것은 나에게 (42)을 줄 것보다,하지만 나에게 isFree()
이 버그가 30
0000000000
0000000000
0000000000
1110000000
1110000000
1110000000
Offtopic : 항상 영어 코멘트를 사용하십시오. –
"작동하지 않는 것 같습니다."우리를 도와 줄 정도로 충분하지 않습니다. 실제로 잘못되고있는 것은 무엇입니까? 오류? 잘못된 출력입니까? –
잘못된 출력, 크기 방법으로 부지런히 노력했지만 실제로는 작동하지 않았습니다 ... 여전히 여러 크기의 블록이있는 경우 문제가 발생합니다 (지금 내 의견이 변경됨) – Pieterjan