POJ-2386-Lake Counting

题目链接

http://poj.org/problem?id=2386

题意有一个N*M的园子雨后起了积水。八连通的积水被认为是连在一起的。请求出园子总共有多少水洼?

Sample Input

10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

Sample Output

3


从任意W开始,不停地把邻接的部分用'.' 代替,记录次数

代码

#include<stdio.h>

int n,m;
char map[110][110];

void dfs(int x,int y)
{
map[x][y]='.';
for(int dx=-1; dx<=1; dx++)
{
for(int dy=-1; dy<=1; dy++)
{
int nx=x+dx;
int ny=y+dy;
if(nx>=0&&nx<n&&ny>=0&&ny<m&&map[nx][ny]=='W')
dfs(nx,ny);
}
}
}

int main(void)
{
int i,j,k;
while(scanf("%d%d",&n,&m)==2)
{
getchar();
k=0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
scanf("%c",&map[i][j]);
}
getchar();
}
for(i=0; i<n; i++)
for(j=0; j<m; j++)
if(map[i][j]=='W')
{
dfs(i,j);
k++;
}
printf("%d ",k);
}
return 0;
}

原文地址:https://www.cnblogs.com/liudehao/p/4027292.html