题目描述
题目这句话表示的不是很清楚 : “如果一块陆地像素与海洋相邻(上下左右四个相邻像素中有海洋),它就会被淹没”
实际上边缘的陆地也会被淹没
C++ 代码
#include<iostream>
#include<cstring>
using namespace std;
char a[1010][1010];
int v1[1010][1010]={0};
int n,ans=0,flag=0;
void dfs(int i,int j){
v1[i][j]=1;
if(i>1 &&i<n &&j>1 &&j<n &&a[i-1][j]=='#'&&a[i+1][j]=='#'&&a[i][j-1]=='#'&&a[i][j+1]=='#') flag=1;
// 若当前岛屿存在四周都是陆地的点,则标记
if(i>1 && !v1[i-1][j] && a[i-1][j]=='#') dfs(i-1,j);
if(i<n && !v1[i+1][j] && a[i+1][j]=='#') dfs(i+1,j);
if(j>1 && !v1[i][j-1] && a[i][j-1]=='#') dfs(i,j-1);
if(j<n && !v1[i][j+1] && a[i][j+1]=='#') dfs(i,j+1);
}
int main(){
cin>>n;
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][j]=='#' && !v1[i][j]){
dfs(i,j);
if(!flag) ans++;
flag=0;
}
}
}
cout<<ans;
return 0;
}