AcWing 1233. 全球变暖
原题链接
简单
C++ 代码
//https://www.acwing.com/problem/content/1235/
//海洋为0,陆地为1
#include <iostream>
#include <stdio.h>
using namespace std;
int N;
int qnum=0,hnum=0;//淹没前和淹没后的陆地数
bool temp=false;
int islands[1000][1000],v[1000][1000];
int na[4]={0,-1,0,1},nb[4]={1,0,-1,0};//右上左下
void dfs(int a,int b){//行列陆地个数
v[a][b]=1;
//如果满足上下左右都是#,返回true,这就避免了在同一块区域有2个以上类似的情况
if(islands[a+1][b]==1 && islands[a-1][b]==1 && islands[a][b+1]==1 && islands[a][b-1]==1)
temp=true;
for(int i=0;i<4;i++){//dfs
int aa=a+na[i],bb=b+nb[i];
//越界退出 当前循环
if(aa<0 || aa>=N || bb<0 || bb>=N) continue;
//遍历数组,把陆地区域全部遍历并把对应的v数组的区域至1
if(islands[aa][bb]==1 && v[aa][bb]==0){
dfs(aa,bb);
}
}
}
int main(){
cin >> N;
char c;
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
cin >> c;
if(c=='.') islands[i][j]=0;
if(c=='#') islands[i][j]=1;
}
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(islands[i][j]==1 && v[i][j]==0){
temp=false;
dfs(i,j);
qnum++;
if(temp==true)
hnum++;
}
}
}
cout << qnum-hnum << endl;
return 0;
}