资深守护
题目描述 Description
有一个a×b的小镇,由村庄和空地组成。村庄是由一些的1(代表房屋)构成的组合。每个村庄的房屋比较集中,房屋都是相邻的。村庄的面积就是村庄上值为1的单元格。如下图:
这个小镇最大的村庄面积为7,而不是12.(相邻表示的是上下左右四个方向相邻)
输入描述 Input Description
a+1行:
第一行,两个空格隔开的正整数a,b
接下来a行,每行b个空格隔开的0或1,0代表空地,1代表房屋
输出描述 Output Description
最大的村庄面积,如果没有村庄,则最大面积为0
样例输入 Sample Input
样例输入1: 8 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 1 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 1 0 0 1 1 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 样例输入2: 1 6 0 0 0 0 0 0
样例输出 Sample Output
样例输出1: 7 样例输出2: 0
数据范围及提示 Data Size & Hint
0≤a,b≤50
程安琪在2024-08-18 14:43:16追加了内容
0分代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y;
};
queue<node> q;
bool vis[105][105],a[105][105];
int maxn=-0x3f3f3f3f;
int n,m,x,y;
int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
void bfs(int x,int y){
q.push((node){x,y});
while(!q.empty()){
node h=q.front();
q.pop();
for(int i=0;i<4;i++){
int dx=h.x+dir[i][0],dy=h.y+dir[i][1];
if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&!vis[dx][dy]&&a[dx][dy]){
q.push((node){dx,dy});
vis[dx][dy]=true;
}
}
}
}
int main(){
cin>>x>>y;
for(int i=1;i<=x;i++){
int cnt=0;
memset(vis,false,sizeof(vis));
for(int j=1;j<=y;j++){
cin>>a[i][j];
}
for(int j=1;j<=y;j++){
if(a[i][j]&&!vis[i][j]){
vis[i][j]=true;
cnt++;
bfs(i,j);
}
}
maxn=max(maxn,cnt);
}
cout<<maxn;
return 0;
}
/*
*/