呵呵,感谢楼上的指正,可惜这楼不是我打的地基,否则真想给你加两分
修改了笔误及逻辑上的错误,不过没有在代码级做优化,有兴趣你再拿到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; }
重剑无锋,大巧不工