题目如下: 题目描述 黑白位图是由黑白两种像素点组成的矩形点阵,图像识别的一个操作是求出黑白位图中最大黑区域的面积。请你设计一个程序完成这个任务。 黑区域由黑像素组成,一个黑区域中的每个像素至少与该区域中的另一个像素相邻(仅指上、下、左、右相邻)。两个不同的黑区域没有相邻的像素点。一个黑区域的面积是其所包含的像素点的个数。
输入 第一行含两个整数n和m(1<=n,m<=100), 分别表示图像的行数与列数;后面紧跟着n行,每行含m个整数0或1,其中第i行表示图像的第i行的m个像素,0表示白像素,1表示黑像素。每一行的2个数之间有一个空格分隔。
输出 相应的图像中最大黑区域的面积。
样例输入
5 6
0 1 1 0 0 1
1 1 0 1 0 1
0 1 0 0 1 0
0 0 0 1 1 1
1 0 1 1 1 0
样例输出
7
错误代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,a[101][101],sum=-999999999,zc;
int dx[4]={0,0,1,-1};
int dy[4]={-1,1,0,0};
void dfs(int x,int y){
a[x][y]=0,zc++;
for(int i=0;i<4;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&a[nx][ny]==1){
dfs(nx,ny);
}
}
return;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==1){
zc=0;
dfs(i,j);
sum=max(zc,sum);
}
}
}
if(sum=-999999999){
cout<<0<<endl;
return 0;
}
cout<<sum<<endl;
return 0;
}
本贴禁止无意义回复,请提供有效帮助。