POJ 2386

来源:互联网 发布:大数据工程师医疗 编辑:程序博客网 时间:2024/06/04 16:15
Lake Counting
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 35731 Accepted: 17734

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 12W........WW..WWW.....WWW....WW...WW..........WW..........W....W......W...W.W.....WW.W.W.W.....W..W.W......W...W.......W.

Sample Output

3

题意:有一个大小为n*m的园子,求出水洼的个数,一个W是一个水洼,多个连着的W也是一个水洼,也就是一个或者多个连着的W组成一个水洼,W表示积水,'.'表示没有积水

这道题目贼坑!算是深搜里的水题了吧!

我用了两种表示方式做

(1)

#include<stdio.h>int n,m;char field[1000][1000];int res;void dfs(int x,int y ){    int dx,dy,nx,ny;    field[x][y]='.';//讲现在所在的位置替换为'.'    for(dx=-1;dx<=1;dx++)    {        for(dy=-1;dy<=1;dy++)        {            nx=dx+x;            ny=dy+y;            if(0<=nx&&nx<n&&0<=ny&&ny<m&&field[nx][ny]=='W')dfs(nx,ny);//判断(nx,ny)是不是在园子里,是否有积水        }    }}int main(){    int i,j;    scanf("%d%d",&n,&m);        for(i=0;i<n;i++)        {            getchar();            for(j=0;j<m;j++)            {                scanf("%c",&field[i][j]);            }        }        res=0;        for(i=0;i<n;i++)        {            for(j=0;j<m;j++)            {                if(field[i][j]=='W')                {                    dfs(i,j);                    res++;                }            }        }        printf("%d\n",res);    return 0;}
(2)

#include<stdio.h>char map[1000][1000];int n,m;int a[8][2]={{1,1},{1,0},{1,-1},{0,1},{0,-1},{-1,0},{-1,1},{-1,-1}};int ans;void dfs(int x,int y){    int i,dx,dy;    map[x][y]='.';    for(i=0;i<8;i++)    {        dx=x+a[i][0];        dy=y+a[i][1];        if(dx>=0&&dx<n&&dy>=0&&dy<m&&map[dx][dy]=='W') dfs(dx,dy);    }}int main(){    int i,j;    scanf("%d%d",&n,&m);        for(i=0;i<n;i++)        {            getchar();            for(j=0;j<m;j++)            {                scanf("%c",&map[i][j]);            }        }        ans=0;        for(i=0;i<n;i++)        {            for(j=0;j<m;j++)            {                if(map[i][j]=='W')                {                    dfs(i,j);                    ans++;                }            }        }        printf("%d\n",ans);    return 0;}



原创粉丝点击