题目描述
以二维数组表示图像,其值只有0、1两种,寻找两幅图像中最大的相同方阵
输入
第一行输入一个n,接下来的2n行输入两个n*n数组,寻找一个最大的m*m子区域,使得两个数组在该子区域完全相同
输出
输出m
样例输入
4
1 1 1 1
1 1 1 0
1 1 1 0
1 1 1 1
0 1 1 1
0 1 1 1
0 1 1 1
0 1 1 0
样例输出
2
来源
#include<iostream> #include<cstdio> #include<cmath> #include<string> using namespace std; int a[100][100]; int donser(int num,int sum,int real) { if(sum<1) return 0; for(int i=1;i<=num-sum+1;i++) { for(int j=1;j<=num-sum+1;j++) { if(a[i][j]==0) { real=1; for(int m=i;m<=i+sum;m++) { for(int n=j;n<=i+sum;n++) { if(a[m][n]!=0||m>num+1||n>num+1) { real=0; } } } } if(real==1) return sum; } } sum--; donser(num,sum,0); } int main() { int num=0,sum=0; while(scanf("%d",&num)!=EOF) { for(int i=1;i<=num;i++) for(int j=1;j<=num;j++) scanf("%d",&a[i][j]); for(int i=1;i<=num;i++) { for(int j=1;j<=num;j++) { int temp; scanf("%d",&temp); a[i][j]=abs(a[i][j]-temp); if(a[i][j]==0) sum++; } } sum=sqrt(sum); cout<<donser(num,sum,0)<<endl; } return 0; }