码迷,mamicode.com
首页 > 其他好文 > 详细

poj-2386 lake counting(搜索题)

时间:2018-08-19 00:55:34      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:cte   algo   memory   number   rac   lower   count   str   limit   

Time limit1000 ms

Memory limit65536 kB

 

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

Hint

OUTPUT DETAILS: 

There are three ponds: one in the upper left, one in the lower left,and one along the right side.
 
题意:W是水洼,连起来的W算同一个水洼(是九宫格内的连起来)
题解:dfs搜索,搜索不到了就继续,每一个dfs都可以搜到一个水坑,简而言之,总的dfs的次数就是水坑的个数(dfs重新调用的dfs不算)
#include<iostream>
#include<algorithm>
#include<cstring>
#include<sstream>
#include<cmath>
#include<cstdlib>
#include<queue>
using namespace std;
#define PI 3.14159265358979323846264338327950

int N,M;
const int MAX_N=103;
char field[MAX_N][MAX_N];

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,ny=y+dy;
            if(0<=nx && nx<N && 0<=ny && ny<M && field[nx][ny]==W)
                dfs(nx,ny);
        }
    }
    return ;
}

void solve()
{
    int res =0;
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<M;j++)
        {
            if(field[i][j]==W)
            {
                dfs(i,j);
                res++;
            }
        }
    }
    printf("%d\n",res);
}

int main()
{
    cin>>N>>M;
    for(int i=0;i<N;i++)
        for(int j=0;j<M;j++)
            cin>>field[i][j];
    solve();
    
}

 

poj-2386 lake counting(搜索题)

标签:cte   algo   memory   number   rac   lower   count   str   limit   

原文地址:https://www.cnblogs.com/smallhester/p/9499097.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!