楼逸杨
(楼逸杨)
1
题目描述:
坠落在茫茫的毒瘤之海中,你自闭了。
但是小马哥不会自闭。
小马哥给了你一份毒瘤之海的地图,有 �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 个赞
石茗杰
(石*人_114514hh)
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 个赞
楼逸杨
(楼逸杨)
3
不好意思,我已经AC了
但我会给你解决方案的
你要吗
4 个赞
尹思源
(﹏ℳ๓蒟₯㎕蒻❦.う)
9
结帖吧 你记得把解决方案给那个发代码的
@Dalton
3 个赞