呵呵,感谢楼上的指正,可惜这楼不是我打的地基,否则真想给你加两分
修改了笔误及逻辑上的错误,不过没有在代码级做优化,有兴趣你再拿到OJ上去测试一下。
至于计算范围,楼主给的范围只是64 X 64。需要的话改一下两个宏就可以, 这不是问题。
程序代码:

修改了笔误及逻辑上的错误,不过没有在代码级做优化,有兴趣你再拿到OJ上去测试一下。
至于计算范围,楼主给的范围只是64 X 64。需要的话改一下两个宏就可以, 这不是问题。
程序代码:#include <stdio.h>
#define MAX_M 64
#define MAX_N 64
int MaxRect(char *map, int rows, int cols)
{
int max = 0, i, j, k, t;
for(i = 0; i < rows; i++)
for(j = 0; j < cols; j++)
{
if(map[i * cols + j]) continue;
for(k = 1; i + k < rows && j + k < cols; k++)
{
for(t = 0; t <= k; t++) if(map[(i + k) * cols + j + t]) break;
if(t <= k) break;
for(t = 0; i < k; t++) if(map[(i + k + t) * cols + j]) break;
if(t < k) break;
}
if(k > max) max = k;
}
return max;
}
int main()
{
char map[MAX_M * MAX_N];
int rows, cols, count, i;
for(;;)
{
scanf("%d%d", &rows, &cols);
if(rows == 0 || cols == 0) break;
count = rows * cols;
for(i = 0; i < count; scanf("%d", &map[i++]));
printf("%d\n", MaxRect(map, rows, cols));
}
return 0;
}

重剑无锋,大巧不工









