题目描述:
输入一个n1*m1的矩阵a,和n2*m2的矩阵b,问a中是否存在子矩阵和b相等,若存在,输出所有子矩阵左上角的坐标,若不存在,
输出"There is no answer"。
输入格式:
第一行两个整数n1, m1,表示主矩阵a的行数和列数。
接下来,共n1行,每行m1个整数,表示主矩阵的每个元素值。
第n1+2行两个整数n2, m2,表示子矩阵b的行数和列数。
接下来,共n2行,每行m2个整数,表示子矩阵的每个元素值。
输出格式:
若干行,每行两个数,表示找到子矩阵的左上角位置。
如果找不到子矩阵,那么输出"There is no answer"。
样例输入:
2 4
1 2 3 4
3 4 7 8
1 2
3 4
样例输出:
1 3
2 1
提示:
两个矩阵的行列均小于等于10。
时间限制: 1000ms
空间限制: 256MB
代码如下:
#include<bits/stdc++.h>
using namespace std;
const int N=100;
int n1,m1,n2,m2,a[N][N]={},b[N][N]={};
int main(){
bool x,y;
cin>>n1>>m1;
for(int i=1;i<=n1;i++)
for(int j=1;j<=m1;j++)
cin>>a[i][j];
cin>>n2>>m2;
for(int i=1;i<=n2;i++)
for(int j=1;j<=m2;j++)
cin>>b[i][j];
y=0;
for(int i=1;i<=n1-n2+1;i++)
for(int j=1;j<=m1-m2+1;j++){
x=1;
for(int k=1;k<=n2;k++)
for (int l=1;l<=m2;l++){
if(a[i+k-1][j+l-1]!=b[k][l]) x=0;
}
if(x){
cout<<i<<' '<<j<<endl;
y=1;
}
}
if(!y) cout<<"There is no answer";
return 0;
}