【题目描述】
题意:有一块N×M的土地,雨后积起了水,有水标记为‘W’,干燥为‘.’。八连通的积水被认为是连接在一起的。请求出院子里共有多少水洼?
【输入】
第一行为N,M(1≤N,M≤110)。
下面为N*M的土地示意图。
【输出】
一行,共有的水洼数。
【输入样例】
10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.
【输出样例】
3
【源代码】
#include<bits/stdc++.h>
using namespace std;
char a[120][120];
int xx[8]={-1,1,0,0,-1,-1,1,1},yy[8]={0,0,-1,1,-1,1,-1,1};
int h[10010][3];
int n,m,ans=0,head,tail,x,y;
void dfs(int p,int q)
{
head=0;
tail=1;
h[1][1]=p;
h[1][2]=q;
a[p][q]='.';
while(head<tail)
{
head++;
for(int i=0;i<8;i++)
{
x=h[head][1]+xx[i];
y=h[head][2]+yy[i];
if(x>0&&x<=m&&y>0&&y<=n&&a[x][y]=='W')
{
a[x][y]='.';
tail++;
h[tail][1]=x;
h[tail][2]=y;
}
}
}
}
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i][j]=='W')
{
dfs(i,j);
ans++;
}
}
}
cout<<ans;
return 0;
}