#include<bits/stdc++.h> using namespace std; // //-#---- //##---- //--##-- //------ //-#---- //--#-## // // 从第一个找到最后一个# // 当找到一个的时候,答案+1 // 并且开启搜索,搜索他附近的12个位置是否有# // 如果有#就把他变为- // int n,m,ans; char a[105][105]; int fx[12]={-2,-1,-1,-1,0,0,0,0,1,1,1,2}; int fy[12]={0,-1,0,1,-2,-1,1,2,-1,0,1,0}; void dfs(int x,int y){ for(int i=0;i<=11;i++){ int tx=x+fx[i]; int ty=y+fy[i]; // 如果超出舞台不要管 // 如果是# 那就变为- if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[tx][ty]=='#'){ a[tx][ty]='-'; dfs(tx,ty); } } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) cin>>a[i][j]; } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(a[i][j]=='#'){ ans++; a[i][j]=='-'; dfs(i,j); } } } cout<<ans; } /************************************************************** Problem: 1966 User: admin Language: C++ Result: Accepted Time:25 ms Memory:2084 kb ****************************************************************/