基础DFS-Lake Counting

来源:互联网 发布:新开的淘宝店怎么刷单 编辑:程序博客网 时间:2024/06/04 08:06



题目大意:找坑,八连通(八个方向都可以认为坑是连通的),求解有几个坑
解题思路:基本DFS,遍历每个坑,递归把(遍历找每个连通的坑)每个联通的‘W’变成‘.’,DFS调用几次就是有几个坑

#include<stdio.h>#include<iostream>using namespace std;int N,M;char field[1000][1000];void dfs(int x, int y){    field[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(field[nx][ny]=='W' && nx>=0 && nx<N && ny>=0 && ny<M)            {                dfs(nx,ny);            }        }    }    return ;}int main(){    while(cin>>N>>M)    {        for(int i = 0 ; i < N ; i++)        {                scanf("%s",field[i]);        }        int ans = 0;        for(int i = 0 ; i < N ; i++)        {            for(int j = 0 ; j < M; j++)            {               if(field[i][j]=='W')                    {                        dfs(i,j);                        ans ++;                    }            }        }        cout<<ans<<endl;    }    return 0;}

0 0