30/09/2018, 20:02

Kiểm tra ma trận B có là ma trận con của ma trận A không?

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 ạ!

Sáng Béo viết 22:13 ngày 30/09/2018

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');
Bài liên quan
0