蒜头君和他的朋友周末相约去召唤师峡谷踏青。他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地。草丛通过上下左右 44 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都是草丛,并且所有格子之间都能通过上下左右连通。如果用’#’代表草丛,’.’代表空地,下面的峡谷中有 2 片草地。
##..
..##
蒜头君和他的朋友周末相约去召唤师峡谷踏青。他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地。草丛通过上下左右 44 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都是草丛,并且所有格子之间都能通过上下左右连通。如果用’#’代表草丛,’.’代表空地,下面的峡谷中有 22 片草地。
输入格式
第一行输入 nn, mm (1 \le n,m \le 100)(1≤n,m≤100) 表示峡谷大小。
接下来输入 nn 行字符串表示峡谷的地形。
输入格式
样例输入
样例输出
5
- 这是求连通区域面积,可以不取消标记,类似洪水蔓延
- 求路径的题目千万不能这么做
```
include
using namespace std; int n, m, cnt; char s[105][105]; bool vis[105][105];
void dfs(int x, int y) { if (x < 0 || x >= n || y < 0 || y >= m || vis[x][y] || s[x][y] == ‘.’) return; vis[x][y] = true; dfs(x - 1, y); dfs(x, y - 1); dfs(x + 1, y); dfs(x, y + 1); }
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> s[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (s[i][j] == '#' && !vis[i][j]) {
cnt++;
dfs(i, j);
}
}
}
cout << cnt << endl;
}
```