首页 > 代码库 > Codevs 1569 最佳绿草

Codevs 1569 最佳绿草

1569 最佳绿草

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
 
 
 
题目描述 Description


    贝茜正计划着这一天如何美美地咀嚼春天的绿草,远望着农民约翰钟爱的并被分
割为R (1 <= R <= 100) 行和 C (1 <= C <= 100) 列的草场。她想去数一数草场
有多少个草丛。

    每个草丛在地图上用‘#‘来表示,或者两个‘#‘连在一起(但不是在一个对角线),
给出草场地图,请告诉贝茜草场上一共有多少个草丛。

    例如,下面有一张草场地图 R=5, C=6:

    .#....
    ..#...
    ..#..#
    ...##.
    .#....

    这个草场一共有5个草丛。(1,2);(2,3)+(3+3);(3,6);(4,4)+(4,5);(5,2)

输入描述 Input Description


    * 第 1 行: 2个用空格隔开的整数 R , C

    * 第 2 至 R+1 行: 草场地图信息

输出描述 Output Description

    * 草场上草丛的总个数。

样例输入 Sample Input

5 6
.#....
..#...
..#..#
...##.
.#....

样例输出 Sample Output

5

#include<iostream>#include<cstdio>using namespace std;int n,m,ans,e[4][2]={{0,1},{0,-1},{-1,0},{1,0}};bool map[110][110];char s[110];void dfs(int x,int y){    map[x][y]=0;    for(int i=0;i<4;i++){        int a=x+e[i][0],b=y+e[i][1];        if(a<=n&&a>=1&&b<=m&&b>=1&&map[a][b]==1)            dfs(a,b);    }}int main(){    scanf("%d%d",&n,&m);    for(int i=1;i<=n;i++){        scanf("%s",s+1);        for(int j=1;j<=m;j++){            if(s[j]==.)map[i][j]=0;            if(s[j]==#)map[i][j]=1;        }    }    for(int i=1;i<=n;i++)        for(int j=1;j<=m;j++)            if(map[i][j]==1){                ans++;                dfs(i,j);            }    printf("%d",ans);}

 

Codevs 1569 最佳绿草