DFS

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


#include <iostream>
#include <cstdio>
using namespace std;
const int MAX = 10000;
char Map[MAX][MAX];
int N,M;
int d[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
bool overwall(int nx,int ny)
{
    if(nx>=0&&nx<N&&ny>=0&&ny<M)
    return true;
    else
    return false;
}
void dfs(int x,int y)
{
    Map[x][y]='.';
    for(int k=0;k<8;k++)
    {
        int tx=x+d[k][0];
        int ty=y+d[k][1];
        if(overwall&&Map[tx][ty]=='W')
        dfs(tx,ty);
    }
    return ;
}
void solve()
{
    int ans=0;
    for(int i=0;i<N;i++)
    for(int j=0;j<M;j++)
    {
        if(Map[i][j]=='W')
        {
            dfs(i,j);
            ans++;
        }
    }
    cout<<ans<<endl;
}
int main()
{
    while(cin>>N>>M)
    {
        for(int i=0;i<N;i++)
        {
            for(int j=0;j<M;j++)
            {
                cin>>Map[i][j];
            }
        }
        solve();
    }
    return 0;
}

 

posted @ 2018-08-08 11:16  小学弟-  阅读(125)  评论(0编辑  收藏  举报