我自闭了 题目ID:8010 怎么写啊

题目描述:

坠落在茫茫的毒瘤之海中,你自闭了。

但是小马哥不会自闭。

小马哥给了你一份毒瘤之海的地图,有 �n 行 �m 列,行号从 1 到 n,列号从 1 到 m。如果两个格子上下左右相邻,称为连通。例如 (x, y) 和 (x-1, y) (x+1, y) (x, y-1) (x, y+1) 都相邻。

每一个格子里面可能有毒瘤,也可能没有。毒瘤用 1 表示,否则用 0 表示。定义一个毒瘤连通块:任意两个毒瘤点都可以通过相邻连通关系互相到达的一个区块。那么请问最大的毒瘤连通块包含多少个毒瘤点。

可以参见样例详细理解题意。

输入格式:

第一行 n, m。(1≤n,m≤50)

接下来 n 行,每行 m 个 0 或 1。

输出格式:

一个数表示答案。

样例输入1:

5 4 
0101 
0111 
1000 
1100 
0101

样例输出1:

5

2 个赞

连通块问题……

#include<bits/stdc++.h>
using namespace std;

struct point{
int x,y;
};

int n,m,ans=0;
int vis[60][60];
char mapa[60][60];

//偏移量数组

void bfs(int x,int y){
queue q;
int f=0;
q.push({x,y});
vis[y]=1;
mapa[y]=‘0’;
while(!q.empty()){
//取队头
//丢队头
f++;
for(int i=0;i<4;i++){
int nx=bd.x+dx[i];
int ny=bd.y+dy[i];
if(撞墙&&vis[nx][ny]!=1&&mapa[nx][ny]==‘1’){
q.push(point{nx,ny});
vis[nx][ny]=1;
mapa[nx][ny]=‘0’;
}
}
}
ans=max(f,ans);
}

int main(){
cin>>n>>m;
输入
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(mapa[i][j]==‘1’){
bfs(i,j);
//dfs
}
}
}
cout<<ans;
}

3 个赞

不好意思,我已经AC了
但我会给你解决方案的
你要吗

4 个赞

你AC了你不早说……

3 个赞

没事我是删代码的

3 个赞

你要解决方案吗

3 个赞

他不要我要

3 个赞

什么???

3 个赞

结帖吧 你记得把解决方案给那个发代码的
@Dalton

3 个赞

好的

3 个赞