题目
图上有一个矩阵,由N*M个格子组成,这些格子由两种颜色构成,黑色和白色。请找到面积最大的且内部是黑白交错(即两个相连的正方形颜色不能相同)的正方形。
输入格式:第一行两个整数N和M,分别表示行数和列数。接下来有N行,每行M个数,0或1分别表示这个格子是黑色或白色。
代码
#include<stdio.h>
int n,m;
int check(int i,int j,int arr[n][m]){
if((arr[i][j] != arr[i+1][j]) && (arr[i][j] != arr[i][j+1]) && (arr[i][j] == arr[i+1][j+1]))
return 1;
else
return 0;
}
int scan(int size,int x,int y,int arr[n][m]){
int i,j;
int tmp=0;
for(i=y;i<y+size;i++){
for(j=x;j<x+size;j++){
if(arr[i][j] == 1)
tmp++;
}
}
if(tmp == size * size)
return 1;
else
return 0;
}
int main(){
int i,j,lim,size,flg;
int max=0;
scanf("%d %d",&n,&m);
int arr[n][m];
int flag[n][m];
lim = n>m?m:n;
for(i=0;i<n;i++){
for(j=0;j<m;j++){
scanf("%d",&arr[i][j]);
flag[i][j] = 0;
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%d ",arr[i][j]);
}
printf("\n");
}
printf("-------------------------------\n");
for(i=0;i<n-1;i++){
for(j=0;j<m-1;j++){
if(check(i,j,arr))
flag[i][j] = 1;
else
flag[i][j] = 0;
}
}
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("%d ",flag[i][j]);
}
printf("\n");
}
for(size=1;size<lim+1;size++){
flg = 0;
for(i=0;i<n-size;i++) {
for (j = 0; j < n - 1; j++) {
if (scan(size, i, j, flag)) {
max = size + 1;
flg = 1;
break;
}
}
if (flg == 1)
break;
}
}
printf("%d",max);
return 0;
}
标签:arr,return,格子,int,C语言,正方形,交错
From: https://www.cnblogs.com/Shin404/p/16902813.html