蓝桥杯-全球变暖
链接:https://www.acwing.com/problem/content/1235/
代码:
#include<bits/stdc++.h>
using namespace std;
int k=0,n;
char s[1005][1005];
int b[1005][1005];
int dx[]={0,-1,0,1};
int dy[]={-1,0,1,0};
set<int> se;
void bfs(int x,int y){
b[x][y]=k;
queue<pair<int,int> >qu;
qu.push({x,y});
while(qu.size()){
x=qu.front().first;
y=qu.front().second;
qu.pop();
b[x][y]=k;
for(int i=0;i<4;i++){
int l=x+dx[i];
int r=y+dy[i];
if(l<1||r<1||l>n||r>n||s[l][r]!='#'||b[l][r])continue;
qu.push({l,r});
}
}
}
int main (){
cin>>n;
for(int i=1;i<=n;i++)
cin>>(s[i]+1);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(s[i][j]=='#'&&!b[i][j]){
k++;
bfs(i,j);
}
int x,y;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(s[i][j]=='#'){
for(int t=0;t<4;t++){
x=i+dx[t];
y=j+dy[t];
if(s[x][y]=='.'){
s[i][j]='@';//被淹没
break;
}
}
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(s[i][j]=='#')se.insert(b[i][j]);
cout<<k-se.size();
return 0;
}

浙公网安备 33010602011771号