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

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #define N 105
 5 using namespace std;
 6 int n,m,a[N][N],ans,dx[]={0,0,1,-1},dy[]={1,-1,0,0};
 7 void dfs(int x,int y){
 8     a[x][y]=0;
 9     for(int i=0;i<4;i++){
10         int xx=x+dx[i],yy=y+dy[i];
11         if(a[xx][yy]==1) dfs(xx,yy);
12     }
13 }
14 int main()
15 {
16     char c;
17     memset(a,0,sizeof(a));
18     scanf("%d%d",&n,&m);
19     for(int i=1;i<=n;i++){
20         for(int j=1;j<=m;j++){
21             cin>>c;
22             if(c=='#') a[i][j]=1;
23             if(c=='.') a[i][j]=0;
24         }
25     }
26     for(int i=1;i<=n;i++){
27         for(int j=1;j<=m;j++){
28             if(a[i][j]==1) dfs(i,j),ans++;
29         }
30     }
31     printf("%d",ans);
32     return 0;
33 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七情六欲·

学生党不容易~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值