P1596 [USACO10OCT]Lake Counting S
#include<bits/stdc++.h>
using namespace std;
int n,m;
char g[101][101];
int ans=0;
void shensou(int x,int y)
{
if(x<0||y<0||x>n||y>m)
return;
if(g[x+1][y]=='W')
{
//下一格
g[x+1][y]='.';
shensou(x+1,y);
}
if(g[x-1][y]=='W')
{
//上一格
g[x-1][y]='.';
shensou(x-1,y);
}
if(g[x][y+1]=='W')
{
//右一格
g[x][y+1]='.';
shensou(x,y+1);
}
if(g[x][y-1]=='W')
{
//左一格
g[x][y-1]='.';
shensou(x,y-1);
}
if(g[x+1][y+1]=='W')
{
//右下
g[x+1][y+1]='.';
shensou(x+1,y+1);
}
if(g[x+1][y-1]=='W')
{
//左下
g[x+1][y-1]='.';
shensou(x+1,y-1);
}
if(g[x-1][y-1]=='W')
{
//左上
g[x-1][y-1]='.';
shensou(x-1,y-1);
}
if(g[x-1][y+1]=='W')
{
//右上
g[x-1][y+1]='.';
shensou(x-1,y+1);
}
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>g[i][j];
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
//从是有水塘的位置开始深搜
if(g[i][j]=='W')
{
g[i][j]='.';
shensou(i,j);
ans++;
}
}
cout<<ans;
return 0;
}