Помощь - Поиск - Пользователи - Календарь
Полная версия: Matritsa
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
-programmer-
дана матрица из 0 и 1 в
данной матрицы найти максимальную подматрицу состоящую из 0
Так вот проблема в чем
каждый элемент матрицы посещается не более 1 раза
virt
program max_podmatr;
const max_n = 20;
var a : array[1..max_n,0..max_n]of byte;
b : array[1..max_n,1..max_n]of byte;
i,j,n,m,k : integer;
max : longint;
width : byte;

function min(a,b : integer) : integer;
begin
if a < b then min := a else min := b;
end;

begin
read(n,m);
for i := 1 to n do
for j := 1 to m do
read(b[i,j]);
fillchar(a,sizeof(a),0);
max := 0;
for i := 1 to n do
for j := 1 to m do
if b[i,j] = 0 then a[i,j] := a[i,j - 1] + 1 else a[i,j] := 0;
for i := 1 to n do
for j := 1 to m do
begin
width := a[i,j];
for k := i downto 1 do
begin
width := min (width,a[k,j]);
if width * (i - k + 1) > max then max := width * (i - k + 1);
end;
end;
writeln(max);
end.


сложность O(n^3)
-programmer-
сложность должна быть O(n^2)
virt
значит надо искать именно максимальную квадратную матрицу.
virt
program max_square_podmatr;
const max_n = 20;
var a : array[0..max_n,0..max_n]of byte;
i,j,n,m : integer;
sc : integer;
max : integer;

function min(a,b : integer) : integer;
begin
if a < b then min := a else min := b;
end;

begin
readln(n,m);
fillchar(a,sizeof(a),0);
max := 0;
for i := 1 to n do
for j := 1 to m do
begin
read(sc);
if sc = 1 then a[i,j] := 0 else
begin
a[i,j] := min (a[i - 1,j],a[i,j - 1]);
a[i,j] := min (a[i,j],a[i - 1,j - 1]) + 1;
end;
if a[i,j] > max then max := a[i,j]
end;
writeln(max * max);
end.


сложность O(n^2)
находит максимальный квадрат.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.