#include <iostream> #include <stdio.h> using namespace std; char a[110][110]; int n,m, xx[8]={-1,-1,-1,0,0,1,1,1}, yy[8]={-1,0,1,-1,1,-1,0,1}, vis[110][110]; void did(int i, int j,int k) { if (i<1||j<1||i>n||j>m||a[i][j]=='.'||vis[i][j]==1) return;//没越界没走过 vis[i][j]=1; //标记 for (int kk=0;kk<8;kk++) //各个方向 { int ii,jj; ii=i+xx[kk]; jj=j+yy[kk]; did(ii,jj,k); //dfs //不用重置标记 } } int main() { //freopen("in.txt","r",stdin); cin>>n>>m; for (int i=1;i<=n;i++) scanf("%s",a[i]+1); int ans=0; for (int i=1;i<=n;i++) for (int j=1;j<=m;j++) if (vis[i][j]==0&&a[i][j]=='W') { ans++; did(i,j,ans); //cout<<ans<<endl; //for (int i=1;i<=n;i++) // {for (int j=1;j<=m;j++) cout<<a[i][j];cout<<endl;} } /*did(1,10,1); for (int i=1;i<=n;i++) {for (int j=1;j<=m;j++) cout<<a[i][j];cout<<endl;}*/ cout<<ans; // cout << "Hello world!" << endl; return 0; } 题意:给你一个row*col的矩阵表示一块田地,上面的'W'代表积水,'.'表示干地,问这块田地里面的积水能汇聚成几片水洼。