1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;
int n,m,used[105][105],dir[16]={1,0,1,1,0,1,-1,1,-1,0,-1,-1,0,-1,1,-1}; char map[105][105];
void dfs(int i,int j) { for(int k=0;k<16;k+=2) { int p=i+dir[k]; int q=j+dir[k+1]; if(0<=p&&p;<n&&0<=q&&q;<m) { if(map[p][q]=='W'&&used;[p][q]==0) { used[p][q]=used[i][j]; dfs(p,q); } } } }
int main() { int i,j,t; t=1; memset(used,0,sizeof(used)); memset(map,'.',sizeof(map)); cin>>n>>m; for(i=0;i<n;i++) for(j=0;j<m;j++) cin>>map[i][j]; for(i=0;i<n;i++) for(j=0;j<m;j++) { if(map[i][j]=='W'&&used;[i][j]==0) { used[i][j]=t++; dfs(i,j); } } cout<<t-1<<endl; }
|