AcWing题目链接
数据较小使用dfs,数据较大使用bfs
#include <iostream> #include <cstring> #include <cstdio> #include <queue> using namespace std; const int N = 1005; char g[N][N]; int n, m; typedef pair<int, int> PII; int dx[]={1,-1,0,0,1,1,-1,-1}; int dy[]={0,0,1,-1,1,-1,1,-1}; void bfs(int u, int v){ g[u][v] = '.'; queue<PII> q; q.push({u, v}); while(q.size()){ auto t = q.front(); q.pop(); for(int i = 0; i < 8; i++){ int a = t.first + dx[i]; int b = t.second + dy[i]; if(a>=0&&b>=0&&a<n&&b<m&&g[a][b]=='W') { g[a][b] = '.'; q.push({a, b}); } } } } int main(){ scanf("%d%d", &n, &m); for(int i = 0; i < n; i++){ scanf("%s", g[i]); } int ans = 0; for(int i = 0; i < n; i++){ for(int j = 0; j < m; j++){ if(g[i][j]=='W') { ans++; bfs(i, j); } } } printf("%d\n", ans); return 0; }