这个是原版的c
int size_of_largest_parallelogram(void) {
int max_size = 0, size;
for (int i = 0; i < DIM - 1; ++i)
for (int j1 = 0; j1 < DIM - 1; ++j1) {
if (!grid[i][j1])
continue;
for (int j2 = j1 + 1; j2 < DIM; ++j2) {
if (!grid[i][j2])
break;
size = size_of_largest_parallelogram_with_given_top_side(i, j1, j2, STRAIGHT);
if (size > max_size)
max_size = size;
size = size_of_largest_parallelogram_with_given_top_side(i, j1, j2, LEFT);
if (size > max_size)
max_size = size;
size = size_of_largest_parallelogram_with_given_top_side(i, j1, j2, RIGHT);
if (size > max_size)
max_size = size;
}
}
return max_size;
}
int size_of_largest_parallelogram_with_given_top_side(int i1, int j1, int j2, int dir) {
int length = j2 - j1 + 1;
int i2 = i1;
bool good_so_far = true;
if (dir == STRAIGHT) {
while (good_so_far && ++i2 < DIM)
for (int j = j1; j <= j2; ++j)
if (!grid[i2][j]) {
good_so_far = false;
break;
}
}
else if (dir == LEFT) {
while (good_so_far && ++i2 < DIM && --j1 >= 0) {
--j2;
for (int j = j1; j <= j2; ++j)
if (!grid[i2][j]) {
good_so_far = false;
break;
}
}
}
else if (dir == RIGHT) {
while (good_so_far && ++i2 < DIM && ++j2 < DIM) {
++j1;
for (int j = j1; j <= j2; ++j)
if (!grid[i2][j]) {
good_so_far = false;
break;
}
}
}
if (i2 == i1 + 1)
return 0;
return (i2 - i1) * length;
}
这涉及grid 里面只有 0 1 两种元素
这个是我写的python 第一个函数从 if grid1[i][j1] ==0: 后面开始就没有执行了,不知该怎么改写,还望大家帮忙,谢谢!
def size_of_largest_parallelogram():
max_size = 0
for i in range( 0, dim - 1) :
for j1 in range(0, dim-1) :
if grid1[i][j1] ==0:
continue
for j2 in range ( j1 + 1, dim):
if grid1[i][j2] == 0:
break
size = size_of_largest_parallelogram_1(i,j1, j2, straight)
if size > max_size:
max_size = size
size = size_of_largest_parallelogram_1(i,j1, j2, left)
if size > max_size:
max_size = size
size = size_of_largest_parallelogram_1(i,j1, j2, right)
if size > max_size:
max_size = size
return max_size
def size_of_largest_parallelogram_1( i1, j1, j2, d ):
length = j2 -j1 + 1
i2 = i1
good_state = 1;
if d == straight :
while good_state and ++i2 < dim:
for j in range (j1 , j2+1):
if grid1[i2][j] == 0:
good_state = 0
break
elif d == left:
while good_state and ++i2 < dim and --j1 >=0:
--j2
for j in range (j1, j2+1):
if grid1[i2][j] == 0:
good_state = 0
break
elif d == right:
while good_sate and ++i2 < dim and ++j2 < dim:
++j1
for j in range (j1, j2+1):
if grid1[i2][j] == 0:
good_state = 0
break
if i2 == i1 + 1:
return 0
return (i2 - i1) * length