作业介绍

#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 小时