1409: 【基础】数池塘(四方向)

内存限制:16 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:20 解决:8

题目描述

农夫约翰的农场可以表示成N*M(1≤N≤100≤M≤100)个方格组成的矩形。

由于近日的降雨,在约翰农场上的不同地方形成了池塘。

每一个方格或者有积水('W')或者没有积水('.')。

农夫约翰打算数出他的农场上共形成了多少池塘。

一个池塘是一系列相连的有积水的方格,每一个方格周围的四个方格都被认为是与这个方格相连的。

现给出约翰农场的图样,要求输出农场上的池塘数。

输入

第1行:由空格隔开的两个整数:N和M

第2..N+1行:每行M个字符代表约翰农场的一排方格的状态。

每个字符或者是'W'或者是'.',字符之间没有空格。

输出

输出只有1行,输出约翰农场上的池塘数

样例输入 复制

10 12
W........WW.
.WWW.....WWW
....WW...WW.
.........WW.
.........W..
..W......W..
.W.W.....WW.
W.W.W.....W.
.W.W......W.
..W.......W.

样例输出 复制

13

提示

数据范围

lns="http://www.w3.org/1998/Math/MathML">1,100

#include<bits/stdc++.h>
using namespace std;
#define N 110
int n,m,c=0;
char a[N][N];
int fx[]={0,1,0,-1};
int fy[]={1,0,-1,0};
bool vis[N][N];
void dfs(int x,int y){
   a[x][y]='.';
    for(int i=0;i<4;i++){
        int nx=x+fx[i],ny=y+fy[i];
        if(a[nx][ny]=='W'){
           dfs(nx,ny);
        }
    }  
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
        }
    }
    for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]=='W'){
				c++;
				dfs(i,j);
			}
		}
	}
   cout<<c;
}