对称大法解题范例【2011】四、1
【2011】四、1(子矩阵)输入一个n1*m1的矩阵a,和n2*m2的矩阵b,问a中是否存在子矩阵和b相等。若存在,输出所有子矩阵左上角的坐标;若不存在输出“there
is no answer”。
const
size = 50;
var
n1, m1, n2, m2, i, j, k1, k2 :integer;
a, b : array[1..size, 1..size] of integer;
good, haveans : boolean;
begin
readln(n1, m1);
for i := 1 to n1 do
for j := 1 to m1 do
read(a[i][j]);
readln(n2, m2);
for i := 1 to n2 do
for j := 1 to m2 do
① ;
haveans := false;
for i := 1 to n1 - n2 + 1 do
for j := 1 to ② do
begin
③ ;
for k1 := 1 to n2 do
for k2 := 1 to ④ do
if a[i + k1 - 1][j + k2 -1] <> b[k1][k2] then
good := false;
if good then
begin
writeln(i, ' ', j);
⑤ ;
end;
end;
if not haveans then
writeln('there is no answer');
end.
① 向前4行,read(b[i][j]);
② 向前1行,m1 - m2 + 1
③ 向后4行,good := true
④ 向前1行,m2
⑤ 向前12行,haveans := true