#include
using namespace std;
char ch[1005][1005],arr[1005][1005]={0};
int n,sum1=0,sum2=0,dre1[4]={0,0,1,-1},dre2[4]={1,-1,0,0};
void dfs2(int i,int j)
{
arr[i][j]='.';
for(int k=0;k<4;k++)
{
int x=dre1[k]+i;
int y=dre2[k]+j;
if(arr[x][y]=='#')
dfs2(x,y);
}
}
void dfs1(int i,int j)
{
ch[i][j]='.';
for(int k=0;k<4;k++)
{
int x=dre1[k]+i;
int y=dre2[k]+j;
if(ch[x][y]=='#')
dfs1(x,y);
}
}
int main()
{
scanf("%d",&n);
for(int i=0;i"%s",ch[i]);
for(int i=0;i0;j'.')
arr[i][j]='.';
if(ch[i][j]=='#')
{
if(ch[i-1][j]=='.'||ch[i+1][j]=='.'||ch[i][j-1]=='.'||ch[i][j+1]=='.')
arr[i][j]='.';
else
arr[i][j]='#';
}
}
}
for(int i=0;i0;j'#'){
sum1++;
dfs1(i,j);
}
}
}
for(int i=0;i0;j'#'){
sum2++;
dfs2(i,j);
}
}
}
printf("%d",sum1-sum2);
return 0;
}
如果一个岛里有两块陆地,他们的四周也是陆地,但它们并不相连,按照你main函数第一个双重循环中对判断为陆地且四周有一海洋会把这块陆地设为海洋的设定,会把这两块陆地分成两座岛屿,然而实际上它们属于一块岛屿
还是代码中的问题,自己仔细调试下每一行。
不知道你这个问题是否已经解决, 如果还没有解决的话: