作业介绍
#include<bits/stdc++.h>
using namespace std;
//准备工作:创建结构体存储 点的坐标
const int N=110;
int v[N][N],n,m,cnt;
char a[N][N];
int dx[]={-1,0,1,0};
int dy[]={0,-1,0,1};
struct node{
int x,y;
};
void BFS(int qx,int qy){
queue<node> q;//创建队列
q.push({qx,qy});//把起点入队
v[qx][qy]=1;//标记
while(q.size()){//只要队列不为空
node x=q.front();//取出队首元素扩展
q.pop();//弹出队首
for(int i=0;i<=3;i++){//遍历4个方向扩张
int xx=x.x+dx[i];//扩展点的横坐标
int yy=x.y+dy[i];//扩展点的纵坐标
// 没有越界 不是障碍 没有走过
if(xx>=1 && xx<=n && yy>=1 && yy<=m && a[xx][yy]!='0' && v[xx][yy]==0){
q.push({xx,yy});//把扩展点加入队列
a[xx][yy]='0';
v[xx][yy]=1;//标记已走过
}
}
}
}
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]!='0'){
a[i][j]='0';
BFS(i,j);//把所有和ij联通的细胞都变为0
cnt++;
}
}
}
cout<<cnt;
return 0;
}
ac!
- 状态
- 已结束
- 题目
- 5
- 开始时间
- 2025-3-15 0:00
- 截止时间
- 2025-3-31 23:59
- 可延期
- 24 小时