赞
踩
- /*
- Name: 17_最好的草
- Author: 巧若拙
- Description:
- 描述
- 奶牛Bessie计划好好享受柔软的春季新草。新草分布在R行C列的牧场里。它想计算一下牧场中的草丛数量。
- 在牧场地图中,每个草丛要么是单个“#”,要么是有公共边的相邻两个“#”。给定牧场地图,计算有多少个草丛。
- 例如,考虑如下5行6列的牧场地图
- .#....
- ..#...
- ..#..#
- ...##.
- .#....
- 这个牧场有5个草丛:一个在第一行,一个在第三列横跨了二、三行,一个在第三行,
- 一个在第四行横跨了四、五列,最后一个在第五行。
- 输入
- 第一行包含两个整数R和C,中间用单个空格隔开。
- 接下来R行,每行C个字符,描述牧场地图。字符只有“#”或“.”两种。(1 <= R, C <= 100 )
- 输出
- 输出一个整数,表示草丛数。
- 样例输入
- 5 6
- .#....
- ..#...
- ..#..#
- ...##.
- .#....
- 样例输出
- 5
- */
- #include <iostream>
-
- using namespace std;
-
- const int M = 100;
- const int N = 100;
- char A[N][M];
-
- int main()
- {
- int m, n;
- cin >> n >> m;
- for (int i=0; i<n; i++)
- {
- for (int j=0; j<m; j++)
- {
- cin >> A[i][j];
- }
- }
- int s = (A[0][0] == '#'); //先看左上角是否是草丛
- for (int j=1; j<m; j++)//先统计第1行
- {
- s += (A[0][j] == '#' && A[0][j-1] != '#');
- }
- for (int i=1; i<n; i++)//先统计第1列
- {
- s += (A[i][0] == '#' && A[i-1][0] != '#');
- }
- for (int i=1; i<n; i++)
- {
- for (int j=1; j<m; j++)//左方和上方是草丛时不能重复记录
- {
- s += (A[i][j] == '#' && A[i-1][j] != '#' && A[i][j-1] != '#');
- }
- }
-
- cout << s << endl;
-
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。