站外题求助
查看原帖
站外题求助
943498
wangshenluogu楼主2024/7/20 16:53

题目如下: 题目描述 黑白位图是由黑白两种像素点组成的矩形点阵,图像识别的一个操作是求出黑白位图中最大黑区域的面积。请你设计一个程序完成这个任务。 黑区域由黑像素组成,一个黑区域中的每个像素至少与该区域中的另一个像素相邻(仅指上、下、左、右相邻)。两个不同的黑区域没有相邻的像素点。一个黑区域的面积是其所包含的像素点的个数。

输入 第一行含两个整数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;
} 

本贴禁止无意义回复,请提供有效帮助。

2024/7/20 16:53
加载中...