问题标题: 7203 最大村庄 求解!!

0
0
已解决
程安琪
程安琪
资深守护
资深守护

题目描述 Description

有一个a×b的小镇,由村庄和空地组成。村庄是由一些的1(代表房屋)构成的组合。每个村庄的房屋比较集中,房屋都是相邻的。村庄的面积就是村庄上值为1的单元格。如下图:
image.png
这个小镇最大的村庄面积为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;
}
/*


*/


0
已采纳
吕忆航
吕忆航
高级光能
高级光能

你这个在输入的时候不能直接广搜,你后面数组还没输入完

应该先输入,再一行一行的遍历没有搜过的1,再去广搜

这道题我刚拿深搜也写对了

我要回答