POJ 2386 Lake Counting(dfs入门)

版权声明:《学习技巧》每次使用单边大脑的时间不要太久,连续使用左边大脑30分钟就如同连续使用左臂30分钟一样,周期性的交换让大脑两侧能够轮流休息,左脑活动包括了循序渐进的工作,解决逻辑问题与分析,而右脑活动包括了隐喻,创造性思考,模式匹配和可视化。 https://blog.csdn.net/intmainhhh/article/details/82631563

题目传送门

Description

Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Farmer John would like to figure out how many ponds have formed in his field. A pond is a connected set of squares with water in them, where a square is considered adjacent to all eight of its neighbors. 

Given a diagram of Farmer John's field, determine how many ponds he has.

Input

* Line 1: Two space-separated integers: N and M 

* Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.

Output

* Line 1: The number of ponds in Farmer John's field.

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

解题思路:先把地图存到char数组中,然后遍历到一个W就dfs(i,j)把和它相邻的W全变成'.',然后ans++来记录池塘的个数

代码如下

#include<iostream>
using namespace std;
const int maxn=100+10;
int n,m;
char mp[maxn][maxn];
int dfs(int i,int j)
{
    mp[i][j]='.';

    for(int p=-1;p<=1;p++)
    {
        for(int q=-1;q<=1;q++)
        {
            int di=i+p,dj=j+q;
            if(di>=0&&di<n&&dj>=0&&dj<m&&mp[di][dj]=='W')
                dfs(di,dj);///将联通的'W'都变成'.'
        }
    }
}
void solve()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>mp[i][j];
        }
    }
    int ans=0;///记录池塘个数
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(mp[i][j]=='W')
            {
                dfs(i,j);
                ans++;
            }
        }
    }
    cout<<ans<<endl;
}
int main()
{
    ios::sync_with_stdio(0),cin.tie(0);
    solve();
}

猜你喜欢

转载自blog.csdn.net/intmainhhh/article/details/82631563