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