侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【题解】【bfs】T1249 Lake Counting

Allen Best
2023-07-10 / 0 评论 / 0 点赞 / 103 阅读 / 822 字
温馨提示:
本文最后更新于 2023-07-10,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
#include<bits/stdc++.h>
#define N 105
using namespace std;
//方向数组
int d[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}} ;
struct point{
	int x,y;
};
char a[N][N];//地图 
int vis[N][N],m,n,ans;//走没走过
queue<point> que; 
void bfs(int x,int y){
	vis[x][y]=1;
	point nw;
	nw.x=x;
	nw.y=y;
	que.push(nw);
	while(!que.empty()){
		point nwq=que.front();
		for(int i=0;i<8;i++){
			int nx=nwq.x+d[i][0];
			int ny=nwq.y+d[i][1];
			if(nx>=0&&nx<n&&ny>=0&&ny<m&&a[nx][ny]=='W'&&!vis[nx][ny]){
				//入队 标记走过
				point nxq;
				nxq.x=nx;
				nxq.y=ny;
				que.push(nxq);
				vis[nx][ny]=1; 
			}
		}
		que.pop();
	}
}
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(a[i][j]=='W'&&!vis[i][j]){
				//开始搜索 积水+1
				bfs(i,j);
				ans++; 
			}
		}
	}
	cout<<ans<<endl;
	return 0;
}


0

评论区