poj 2386  Lake Counting DFS

n*m的矩阵
W是水  .是地
问有多少池塘
池塘的定义是:
W通过 八个 方向连接成的一片算作是一个池塘

样例输入中,有左上、左下、右侧三片连接在一起的W
因而样例输出给出了3个池塘的答案

#include <cstdio>
#include <iostream>
#define N 110
using namespace std;
int n,m;
char s[N][N];
void dfs(int x,int y)
{
    s[x][y]='.';
    int i,j;
    for(i=-1; i<=1; i++)
        for(j=-1; j<=1; j++)
        {
            int nx=x+i,ny=y+j;
            if(nx<0||nx>=n||ny<0||ny>=m||s[nx][ny]=='.')
                continue;
            dfs(nx,ny);
        }
}
int main()
{
    scanf("%d%d%*c",&n,&m);
    int ans=0,j,i;
    for(i=0; i<n; i++)
        cin>>s[i];
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            if(s[i][j]=='W') {
                dfs(i,j);
                ans++;
            }
    cout<<ans<<endl;
    return 0;
}

 

posted @ 2016-04-11 19:50  byonlym  阅读(204)  评论(0编辑  收藏  举报