Result: Accepted
Time: 2ms
Memory: 1992kB
#include<bits/stdc++.h>
#include<algorithm>
#include<string>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int n,m,ans=0;
bool s[105][105];
int num[105][105];
int flag[105][105];
void dfs(int x,int y)
{
//cout<<x<<" "<<y<<" "<<num[x][y]<<endl;
if(x>n+1)return;
if(x<0)return;
if(y>m+1)return;
if(y<0)return;
if(x>1)
if(num[x-1][y]==-1&&!s[x-1][y])
{
num[x-1][y]=num[x][y];
dfs(x-1,y);
}
if(num[x][y-1]==-1&&!s[x][y-1])
{
num[x][y-1]=num[x][y];
dfs(x,y-1);
}
if(num[x+1][y]==-1&&!s[x+1][y])
{
num[x+1][y]=num[x][y];
dfs(x+1,y);
}
if(num[x][y+1]==-1&&!s[x][y+1])
{
num[x][y+1]=num[x][y];
dfs(x,y+1);
}
return ;
}
int main(){
cin>>n>>m;
string tmp1;
memset(s,0,sizeof s);
memset(num,-1,sizeof num);
for(int i=1;i<=n;i++)
{
cin>>tmp1;
for(int j=1;j<=m;j++)
{
if(tmp1[j-1]=='.')s[i][j]=false;// 水
else s[i][j]=true;
}
}
for(int i=0;i<=n+1;i++)
{
for(int j=0;j<=m+1;j++)
{
if(num[i][j]!=-1)continue;
if(s[i][j])continue;
num[i][j]=ans;
dfs(i,j);
ans++;
}
}
if(ans==0)ans++;
cout<<ans-1<<endl;
return 0;
}