蒜头君和他的朋友周末相约去召唤师峡谷踏青。他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地。草丛通过上下左右 4个方向扩展其他草丛形成一片草地,任何一片草地中的格子都是草丛,并且所有格子之间都能通过上下左右连通。如果用'#'
代表草丛,'.'
代表空地,下面的峡谷中有 2片草地。
1
##..
..##
处在同一个草地的 2 个人可以相互看到,空地看不到草地里面的人。他们发现有一个朋友不见了,现在需要分头去找,每个人负责一片草地,蒜头君想知道他们至少需要多少人。
输入格式
第一行输入 n, m (1≤n,m≤100) 表示峡谷大小
接下来输入 n 行字符串表示峡谷的地形
输入格式
输出至少需要多少人
样例输入
5 6 .#.... ..#... ..#..# ...##. .#....
样例输出
5
#include<bits/stdc++.h>
using namespace std;
char s[105][105];
int n,m,sum;
int dir[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
int vis[105][105];
void dfs(int x,int y)
{
int x1,y1;
for(int i=0;i<4;i++)
{
x1=x+dir[i][0];
y1=y+dir[i][1];
if(x1>=0&&x1<n&&y1>=0&&y1<m&&vis[x1][y1]==0&&s[x1][y1]=='#')
{
vis[x1][y1]=1;
dfs(x1,y1);
}
}
}
int main()
{
int i,j;
while(cin>>n>>m)
{
sum=0;
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++)
{
scanf("%s",s[i]);
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(s[i][j]=='#'&&vis[i][j]==0)
{
vis[i][j]=1;
dfs(i,j);
sum++;
}
}
}
printf("%d\n",sum);
}
}