http://poj.org/problem?id=2386
#include <iostream>
#include <cstdio>
using namespace std;
const int MAX = 10000;
char Map[MAX][MAX];
int N,M;
int d[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
bool overwall(int nx,int ny)
{
if(nx>=0&&nx<N&&ny>=0&&ny<M)
return true;
else
return false;
}
void dfs(int x,int y)
{
Map[x][y]='.';
for(int k=0;k<8;k++)
{
int tx=x+d[k][0];
int ty=y+d[k][1];
if(overwall&&Map[tx][ty]=='W')
dfs(tx,ty);
}
return ;
}
void solve()
{
int ans=0;
for(int i=0;i<N;i++)
for(int j=0;j<M;j++)
{
if(Map[i][j]=='W')
{
dfs(i,j);
ans++;
}
}
cout<<ans<<endl;
}
int main()
{
while(cin>>N>>M)
{
for(int i=0;i<N;i++)
{
for(int j=0;j<M;j++)
{
cin>>Map[i][j];
}
}
solve();
}
return 0;
}