当前位置:   article > 正文

二维数组练习17_最好的草_在牧场地图中,每个草丛要么是单个“#”,要么是有公共边的相邻两个“#”。给定牧场

在牧场地图中,每个草丛要么是单个“#”,要么是有公共边的相邻两个“#”。给定牧场
  1. /*
  2. Name: 17_最好的草
  3. Author: 巧若拙
  4. Description:
  5. 描述
  6. 奶牛Bessie计划好好享受柔软的春季新草。新草分布在R行C列的牧场里。它想计算一下牧场中的草丛数量。
  7. 在牧场地图中,每个草丛要么是单个“#”,要么是有公共边的相邻两个“#”。给定牧场地图,计算有多少个草丛。
  8. 例如,考虑如下5行6列的牧场地图
  9. .#....
  10. ..#...
  11. ..#..#
  12. ...##.
  13. .#....
  14. 这个牧场有5个草丛:一个在第一行,一个在第三列横跨了二、三行,一个在第三行,
  15. 一个在第四行横跨了四、五列,最后一个在第五行。
  16. 输入
  17. 第一行包含两个整数R和C,中间用单个空格隔开。
  18. 接下来R行,每行C个字符,描述牧场地图。字符只有“#”或“.”两种。(1 <= R, C <= 100 )
  19. 输出
  20. 输出一个整数,表示草丛数。
  21. 样例输入
  22. 5 6
  23. .#....
  24. ..#...
  25. ..#..#
  26. ...##.
  27. .#....
  28. 样例输出
  29. 5
  30. */
  31. #include <iostream>
  32. using namespace std;
  33. const int M = 100;
  34. const int N = 100;
  35. char A[N][M];
  36. int main()
  37. {
  38. int m, n;
  39. cin >> n >> m;
  40. for (int i=0; i<n; i++)
  41. {
  42. for (int j=0; j<m; j++)
  43. {
  44. cin >> A[i][j];
  45. }
  46. }
  47. int s = (A[0][0] == '#'); //先看左上角是否是草丛
  48. for (int j=1; j<m; j++)//先统计第1行
  49. {
  50. s += (A[0][j] == '#' && A[0][j-1] != '#');
  51. }
  52. for (int i=1; i<n; i++)//先统计第1列
  53. {
  54. s += (A[i][0] == '#' && A[i-1][0] != '#');
  55. }
  56. for (int i=1; i<n; i++)
  57. {
  58. for (int j=1; j<m; j++)//左方和上方是草丛时不能重复记录
  59. {
  60. s += (A[i][j] == '#' && A[i-1][j] != '#' && A[i][j-1] != '#');
  61. }
  62. }
  63. cout << s << endl;
  64. return 0;
  65. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/253545
推荐阅读
相关标签
  

闽ICP备14008679号