có ai có hướng giải quyết gì không ạ? tình hình đây là bài thứ 2 trên mạng hỏi về check ma trận con đó… giờ cũng chưa có ý tưởng nào dễ thực hiện cả. cảm ơn m.n ạ!
Kiểm tra ma trận B có là ma trận con của ma trận A không?
Mình có viết bằng pascal như sau:
A(mxn), B(pxq)
Mình sẽ tìm vị trí của B[1,1] trong A. B[1,1] chỉ có thể ở trong phần ma trận A có chỉ số hàng i từ 1 đến m-p+1, chỉ số cột j từ 1 đến n-q+1 thì phần còn lại mới đủ để chứa cả ma trận B.
Khi tìm được 1 phần tử là B[1,1] trong vùng đó (a[i,j]=b[1,1]) thì ta xét các phần tử còn lại của A theo kích thước của ma trận B lấy chỉ số i,j làm mốc.
Trong vùng này, nếu có 1 phần tử không trùng thì không xét tiếp các phần tử khác trong vùng này, mà thoát ra tìm phần tử B[1,1] tiếp theo trong A.
Còn nếu tất cả phần tử B đều thuộc A rồi thì không tìm B[1,1] nữa.
d:=0;
for i:=1 to m-p+1 do
begin
for j:=1 to n-q+1 do
if a[i,j]=b[1,1] then
begin
d:=1;
for x:=i to i+p-1 do
begin
for y:=j to j+q-1 do
if a[x,y]<>b[x-i+1,y-j+1] then
begin
d:=0;
break;
end;
if d=0 then break;
end;
if d=1 then break;
end;
if d=1 then break;
end;
if d=1 then
writeln('Ma tran B la ma tran con cua ma tran A')
else
writeln('Ma tran B khong la ma tran con cua ma tran A');
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?