有几个水洼(DFS)
#include <iostream> #include<cstdio> using namespace std; #define maxn 105 char field[maxn][maxn]; int n,m; void dfs(int x,int y) { field[x][y]='.';//注意要改成. for(int dx=-1;dx<=1;dx++) for(int dy=-1;dy<=1;dy++) //八连通,八个方向都要dfs { int xx=x+dx,yy=y+dy; if(xx>=0&&xx<n&&yy<m&&yy>=0&&field[xx][yy]=='W') dfs(xx,yy); } } void solve() { int ans=0; for(int i=0;i<n;i++) for(int j=0;j<m;j++) if(field[i][j]=='W') { dfs(i,j); ans++;//dfs几次就代表有几个水洼 } cout<<ans; } int main() { cin>>n>>m; for(int i=0;i<n;i++) for(int j=0;j<m;j++) cin>>field[i][j]; solve(); return 0; }