蒜头君和他的朋友周末相约去召唤师峡谷踏青。他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地。草丛通过上下左右4个方向扩展其他草丛形成一片草地,任何一片草地中的格子都是草丛,并且所有格子之间都能通过上下左右连通。如果用'#'
代表草丛,'.'
代表空地,下面的峡谷中有2片草地。
##..
..##
处在同一个草地的2个人可以相互看到,空地看不到草地里面的人。他们发现有一个朋友不见了,现在需要分头去找,每个人负责一片草地,蒜头君想知道他们至少需要多少人。
输入格式
第一行输入n,m (1≤n,m≤100) 表示峡谷大小
接下来输入n行字符串表示峡谷的地形
输入格式
输出至少需要多少人
样例输入
5 6
.#....
..#...
..#..#
...##.
.#....
样例输出
5
#include <iostream>
using namespace std;
int x,y,m,n,ans=0;
char map[105][105];
int flag[105][105];
int cell[105][105];
int xx[8]={0,1,-1,0};/*横向位移*/
int yy[8]={1,0,0,-1};/*纵向位移*/
void dfs(int x,int y){
if(map[x][y]=='.'){
return ;
}
flag[x][y]=1;/*标记(x,y)已经被访问*/
for(int i=0;i<4;i++){
int tx=x+xx[i];
int ty=y+yy[i];
/*继续搜素周围可达的位置*/
if(cell[x][y]==1 && flag[tx][ty]!=1 && tx>=1 && ty>=1 && tx<=n && ty<=m){
dfs(tx,ty);
}
}
return ;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char s;
cin>>s;
map[i][j]=s;
if(s=='#'){
/*标记(x,y)为草地*/
cell[i][j]=1;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
/*如果是草地并且没有被访问过,开始搜索*/
if(cell[i][j] && flag[i][j]==0){
dfs(i,j);
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}