导航菜单
首页 >  noc编程大赛python真题小高组  > 2023年NOC大赛

2023年NOC大赛

香蕉田

编程实现

小猴有一片矩形香蕉林,香蕉林一共被分成了 n x m 个小块,每个小块上会有一颗香蕉树或者是一块空地。我们用 0 表示一块空地,用 1 表示一颗香蕉树,香蕉林之外可以视作全部是空地。

小猴认为一个香蕉田由聚在一起的 1 相连接而组成(上下左右相邻)。

在一个香蕉田 A 中,可以从中选出若干个香蕉树,使得这些香蕉树可以通过上、下、左、右方向连接构成一个“环”。

如果另一个香蕉田 B 所占据的格子全部位于这个“环”内部,就将香蕉田 B 视作香蕉田A 的子香蕉田。

若 B 是 A 的子香蕉田,C 是 B 的子香蕉田,那么 C 也是 A 的子香蕉田。

例如,有 5 x 5 的香蕉林:

其中香蕉田有两个,分别用蓝色区域和绿色区域来表示,但是绿色区域的香蕉田是蓝色区域香蕉田的子香蕉田。如果不统计子香蕉田的个数,那么该香蕉林中只有一个香蕉田。

现在,请你帮助小猴统计一下香蕉林中一共有多少个香蕉田。在进行统计时不需要统计子香蕉田的数目。

输入描述

第一行,包含一个整数 T,表示有 T 组测试数据。( 1≤T≤10 )

对于每一组数据:

第一行包含两个整数 n,m,表示香蕉林的大小。( 1≤n,m≤50 )

接下来的 n 行,每行包含 m 个字符,保证字符只可能是 0 或 1。

输出描述

对于每组数据,输出一行,包含一个整数表示答案。

输入样例

25 501111110011010110001111115 6111111100001010101100001111111

输出样例

13

样例说明

对于第一组数据,包含两个香蕉田,下面用不同的颜色进行了区分:

绿色香蕉田在蓝色香蕉田的“环”内部,所以绿色香蕉田是蓝色香蕉田的子香蕉田,答案为 1。

对于第二组数据,包含三个香蕉田,下面用不同的颜色进行了区分:

注意橙色香蕉田并不是蓝色香蕉田或者绿色香蕉田的子香蕉田 ,因为蓝色香蕉田和绿色香蕉田中均没有“环”,答案为 3。

相关推荐: