_xiao_ @ 2023-08-22 16:59:44
#include<bits/stdc++.h>
using namespace std;
int m[1010][1010],a,n;
int dx[5]={-1,0,1,0},dy[5]={0,1,0,-1};
int h[10001][3]={0};
int main(){
cin>>n;
char a;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cin>>a;
if(a=='#') m[i][j]=1;//岛屿标记为1,否则为0
}
}//输入
int sum=0;int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(m[i][j]==1){
//开始搜索
h[1][1]=i;h[1][2]=j;
int head=1,tail=1;
int ccf=0;
while(head<=tail){
for(int k=0;k<4;k++){
int u=h[head][1]+dx[k],v=h[head][2]+dy[k];
if(u>=0 && u<n && v>=0 && v<n && m[u][v]==1){
if( abs(m[u+1][v])==1 && abs(m[u-1][v])==1 && abs(m[u][v+1])==1 && abs(m[u][v-1])==1 ){
ccf=1;
}//如果海水上涨没有淹没
m[u][v]=-1;
if( abs(m[i+1][j]==-1) && abs(m[i-1][j])==-1 && abs(m[i][j+1]==-1) && abs(m[i][j-1]==-1 ) ){
m[i][j]=2;
}
tail++;
h[tail][1]=u;
h[tail][2]=v;
}
}
head++;
}
if(ccf==1) ans++;//这个岛屿没有被淹没
sum++;
//搜索完一个岛屿
}
}
}
//cout<<sum<<" ";
cout<<sum-ans;
return 0;
}
by 天使宝贝 @ 2023-08-22 17:08:02
所有数组定义加一个0
by 天使宝贝 @ 2023-08-22 17:10:51
@xiao
by _xiao_ @ 2023-08-22 17:48:40
过了,谢谢
by ICPC42 @ 2024-03-31 09:57:37
我也RE了,请问所有数组定义加一个0是什么意思