蒟蒻12分求助
查看原帖
蒟蒻12分求助
567002
Zhangky2021楼主2022/12/15 20:39
#include<iostream>
#include<queue>
using namespace std;
char a[1000][1000], b[1000][1000], vis[1000][1000];
int n, s=0;
struct pos{
	int x, y;
	pos (int ax, int ay){
		x=ax, y=ay;
	}
};
void bfs(int x, int y){
	queue <pos> q;
	q.push(pos(x, y));
	while(!q.empty()){
		pos now=q.front();
		q.pop();
		int x=now.x, y=now.y;
		if(x<1||x>n||y<1||y>n||vis[x][y]||b[x][y]=='.')continue;
		vis[x][y]=1;
		q.push(pos(x+1, y));
		q.push(pos(x, y+1));
		q.push(pos(x, y-1));
		q.push(pos(x-1, y));
	}
}
int main(){
	cin>>n;
	for(int i=0;i<=n+1;i++){	
		for(int j=0;j<=n+1;j++){
		a[i][j]='#';
		}
	}
	for(int i=1;i<=n;i++){	
	for(int j=1;j<=n;j++){
		cin>>a[i][j];
	}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(a[i+1][j]=='.'||a[i][j+1]=='.'||a[i-1][j]=='.'||a[i][j-1]=='.'||a[i][j]=='.'){
				b[i][j]='.';
			}
			else b[i][j]='#';
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(vis[i][j]==0&&b[i][j]=='#'){
				bfs(i, j);
				s++;
			}
		}
	}
	cout<<s;
	return 0;
}
2022/12/15 20:39
加载中...