蒜头君和他的朋友周末相约去召唤师峡谷踏青。他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地。草丛通过上下左右 44 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都是草丛,并且所有格子之间都能通过上下左右连通。如果用’#’代表草丛,’.’代表空地,下面的峡谷中有 2 片草地。

  1. ##..
  2. ..##

蒜头君和他的朋友周末相约去召唤师峡谷踏青。他们发现召唤师峡谷的地图是由一块一块格子组成的,有的格子上是草丛,有的是空地。草丛通过上下左右 44 个方向扩展其他草丛形成一片草地,任何一片草地中的格子都是草丛,并且所有格子之间都能通过上下左右连通。如果用’#’代表草丛,’.’代表空地,下面的峡谷中有 22 片草地。

输入格式

第一行输入 nn, mm (1 \le n,m \le 100)(1≤n,m≤100) 表示峡谷大小。
接下来输入 nn 行字符串表示峡谷的地形。

输入格式

输出至少需要多少人。

样例输入

5 6
.#….
..#…
..#..#
…##.
.#….

样例输出

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;

}

```