Start: Dec, 04, 2016 12:00:00
杭州师范大学第十届程序设计竞赛—正式
End: Dec, 04, 2016 17:00:00
Time elapsed:
Time remaining:

Problem_ID: J
Result: Accepted
Time: 2ms
Memory: 1992kB
In contest: 1075

#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;
}