刷题——Lake Counting POJ

来源:互联网 发布:2016中国象棋软件排名 编辑:程序博客网 时间:2024/06/06 15:37

/*
典型的dfs搜索问题
*/

#include <stdio.h>

#include <math.h>
#include <algorithm>
#include <string.h>
using namespace std;
char map[105][105];
bool vis[105][105];
int n,m;
int d[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
void dfs(int x,int y){
    vis[x][y]=true;
    for(int i=0;i<8;i++){
        int tx=x+d[i][0];
        int ty=y+d[i][1];
        if(tx>=0&&ty>=0&&tx<n&&ty<m&&!vis[tx][ty]&&map[tx][ty]!='.'){
            dfs(tx,ty);
        }
    }
}
int main(){
    while(~scanf("%d %d",&n,&m)){
        for(int i=0;i<n;i++){
            scanf("%s",map[i]);
        }
        memset(vis,false,sizeof(vis));
        int num=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                if(!vis[i][j]&&map[i][j]!='.'){
                    dfs(i,j);
                    num++;
                }
            }
        }
        printf("%d\n",num);
    }
    return 0;
}