Description
给一个N*N的01矩阵, 求一个面积最大的全为1的正方形子矩阵. 输出它的面积.
Input
输入文件square.in的第一行包含一个正整数N. 接下来N行, 每行N个数, 保证不是0就是1. 每行相邻两个数之间没有空格.
Output
输出文件为square.out,仅包含一个整数表示最大的全1子正方形矩阵的面积。
题解
五个字,优美的暴力。代码
var n,ans:longint; f:array [0..1001,0..1001] of integer; a:array [0..1001,0..1001] of char; procedure init; var i,j:longint; begin readln(n); for i:=1 to n do begin for j:=1 to n do read(a[i,j]); readln; end; for i:=0 to n+1 do begin a[0,i]:='0'; a[n+1,i]:='0'; end; for i:=0 to n+1 do begin a[i,0]:='0'; a[i,n+1]:='0'; end; ans:=0; end; procedure main; var i,j,x,min:longint; begin fillchar(f,sizeof(f),0); for i:=1 to n do for j:=1 to n do if (a[i,j]='1') then if (a[i-1,j]='0') then f[i,j]:=1 else f[i,j]:=f[i-1,j]+1; for i:=1 to n do for j:=1 to n do if a[i,j]='1' then begin x:=j; min:=maxlongint; while a[i,x]='1' do begin if f[i,x]<min then min:=f[i,x]; if ((x-j+1)*min>ans) and ((x-j+1)=min) then ans:=(x-j+1)*min; inc(x); end; end; write(ans); end; begin init; main; end.