输入描述:
第一行输入2个数字M N,表示输入图片的大小,是M+N的数据(M、N小于1024)
之后M行数据为输入图像的数据内容,每行N个数字,表示该行的像素值
之后M行数据为输出图像的数据内容,每行N个数字,表示改行的像素值
输出描述:
输出一个数字,表示未被修改的连续像素区域面积的最大值。
输入样例1:
5 5
1 5 3 2 5
1 0 4 7 2
3 4 2 3 3
1 3 2 4 8
4 3 1 5 7
1 5 3 2 5
2 3 4 6 2
3 3 3 4 1
1 3 4 5 8
4 2 7 3 8
输出样例1:
7
说明:
输入的内容包含以下信息:
第一行5 5表示我们的图片是5*5大小的
第二至六行表示应用输入图片信息
第七至十一行表示应用输出的图片信息
输出表示未被更改的连续像素区域的最大面积是7
输入样例2:
7 7
1 1 1 0 1 1 0
1 0 1 1 1 1 1
1 1 0 0 0 1 1
1 1 1 0 1 0 1
1 0 1 1 1 1 0
1 0 1 0 0 1 0
1 0 0 0 0 0 1
1 0 0 1 1 0 0
1 0 0 0 0 0 1
1 0 1 0 0 1 0
0 1 1 1 1 0 1
1 0 0 0 1 1 0
0 1 0 1 1 0 0
1 0 0 0 0 0 1
输出样例2:
17
源码:
package com.kedaxunfei;
import java.util.Scanner;
/*
2022-9-17
科大讯飞-03
输入描述:
第一行输入2个数字M N,表示输入图片的大小,是M+N的数据(M、N小于1024)
之后M行数据为输入图像的数据内容,每行N个数字,表示该行的像素值
之后M行数据为输出图像的数据内容,每行N个数字,表示改行的像素值
输出描述:
输出一个数字,表示未被修改的连续像素区域面积的最大值
*/
public class Main02_2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int n = sc.nextInt();
int[][] a = new int[m][n];
int[][] b = new int[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
a[i][j] = sc.nextInt();
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
b[i][j] = sc.nextInt();
}
}
System.out.println(process(a,b));
}
public static int process(int[][] a,int[][] b){
int m = a.length,n = a[0].length;
int res = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if(a[i][j] == b[i][j]){
res = Math.max(res,dfs(a,b,i,j,m,n));
}
}
}
return res;
}
private static int dfs(int[][] a, int[][] b, int i, int j, int m, int n) {
if(i < 0 || j < 0 || i >= m|| j >= n){
return 0;
}
if(a[i][j] != b[i][j]){
return 0;
}
b[i][j] = a[i][j] + 1;
return dfs(a,b,i-1,j,m,n)
+dfs(a,b,i+1,j,m,n)
+dfs(a,b,i,j-1,m,n)
+dfs(a,b,i,j+1,m,n) + 1;
}
}