搜索bfs #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> int N,M; char map[110][110]; bool flag[110][110]; //int dir[8][2]={-1,1,0,1,1,1,-1,0,1,0,-1,-1,0,-1,1,-1}; int dir[8][2]={ {-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0} }; void dfs(int i,int j) { map[i][j]='.'; for(int k=0;k<8;k++) { int dx = i+dir[k][0]; int dy = j+dir[k][1]; if(dx>=0 && dx<N && dy>=0 && dy < M && map[dx][dy]=='W' ) { //flag[dx][dy]=true; dfs(dx,dy); } } } int main() { while(scanf("%d%d",&N,&M)!=EOF) { for(int i=0;i<N;i++) { scanf("%s",map[i]); } memset(flag,false,sizeof(flag)); int sum=0; for(int i=0;i<N;i++) { for(int j=0;j<M;j++) { if(map[i][j]=='W') { sum++; flag[i][j]=true; dfs(i,j); } } } printf("%d\n",sum); } return 0; }