#include<iostream>//深度优先进行遍历
#include<stdio.h>
using namespace std;
char t[105][105];
int n,m;
void dfs(int x,int y)
{
t[x][y]='.';
int nx,ny;
for(int dx=-1;dx<=1;dx++)
{
for(int dy=-1;dy<=1;dy++)
{
nx=dx+x;
ny=dy+y;
if(0<=nx&&nx<n&&0<=ny&&ny<m&&t[nx][ny]=='W')
{
dfs(nx,ny);
}
}
}
}
int main()
{
char c;
int num=0;
scanf("%d%d%c",&n,&m,&c);
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
scanf("%c",&t[i][j]);
}
scanf("%c",&c);
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(t[i][j]=='W')
{
dfs(i,j);
num++;
}
}
}
printf("%d\n",num);
return 0;
}
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
//这个是10*12的测试数据
#include<iostream>//广度优先进行遍历
using namespace std;
#include<stdio.h>
#include<queue>
typedef pair<int ,int> P;//第一个叫做first,第二个叫做second
queue<P> que;
char Map[20][20];
int N,M;
int bfs(int x,int y)
{
Map[x][y]='.';
que.push(P(x,y));
while(que.size())
{
P p=que.front();//这个是他的第一个
que.pop();
for(int dx=-1;dx<=1;dx++)
{
for(int dy=-1;dy<=1;dy++)
{
int nx=p.first+dx;
int ny=p.second+dy;
if(0<nx&&nx<=N&&0<ny&&ny<=M&&Map[nx][ny]=='W')
{
Map[nx][ny]='.';
que.push(P(nx,ny));//把这个点压进去
}
}
}
}
}
int main()
{
int sum=0;
char cx;
scanf("%d%d%c",&N,&M,&cx);
for(int i=1;i<=N;i++)//输入地图信息
{
for(int j=1;j<=M;j++)
{
scanf("%c",&Map[i][j]);
}
scanf("%c",&cx);
}
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
{
if(Map[i][j]=='W')
{
sum++;
bfs(i,j);//这个就是对其进行遍历
}
}
}
printf("%d\n",sum);
return 0;
}