永发信息网

c语言题 编程

答案:1  悬赏:30  手机版
解决时间 2021-08-17 20:29
  • 提问者网友:無理詩人
  • 2021-08-17 17:11

 

卫星照片(satel)

 

农夫 John 正在研究他的农场的卫星照片.照片为一个R (1 <=

R <= 75) 行  C (1 <= C <= 75) 列的字符矩阵表示.如下图:

..................

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

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

..................

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

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

图上的一块相连通的 "#" 表示一群奶牛或一个房间, 两个子"#" 连通的意思是说左右或上下相连.而下面的两块则是分开的:

....

.#..

..#.

....

John现在根据卫星照片上的的这些"#"块的形状来判断哪些是牛群,哪些是房间.如果一个"#"块形状的边是水平或垂直的矩形,则是房间.其它的则认为都是牛群.在第一个图中,有三个房间 ( 2x1, 2x5, and 1x1)和2群牛.

请根据输入文件中的数据,统计出房间数和牛群数.

数据中牛群不会包围另一个牛群或房间.

输入格式: satel.in

* 第一行,两个整数: R 和 C.

* 和 2..R+1行: 第 i+1 行表示照片的第 i 行情况,由 C 字符组成.

输出格式:

* 第一行: 房间数.

* 第二行: 牛群数.

 

输入样例 (file satel.in):

5 8

#####..#

#####.##

......#.

.###...#

.###..##

 

输出样例 (file satel.out):

2

2

 

 

 

给讲一下算法也行 核心核心的东西

最佳答案
  • 五星知识达人网友:迟山
  • 2021-08-17 18:08
BFS,对每一个块维护left,right,up,down四个变量,让它们分别表示某一个块中最左,最右,最上,最下的四个值(不是坐标)。在遍历完一个块之后,有它们生成一个矩形,它的四个左边分别为(l,u),(r,u),(l,d),(r,d),判断这个矩形内的点是否都是#。时间复杂度O(RC)。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯