简答题

课程名称: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。 输出描述 对于每组数据,输出一行,包含一个整数表示答案。 输入样例 2 5 5 01111 11001 10101 10001 11111 5 6 111111 100001 010101 100001 111111 输出样例 1 3 样例说明 对于第一组数据,包含两个香蕉田,下面用不同的颜色进行了区分: 绿色香蕉田在蓝色香蕉田的“环”内部,所以绿色香蕉田是蓝色香蕉田的子香蕉田,答案为 1。 对于第二组数据,包含三个香蕉田,下面用不同的颜色进行了区分: 注意橙色香蕉田并不是蓝色香蕉田或者绿色香蕉田的子香蕉田 ,因为蓝色香蕉田和绿色香蕉田中均没有“环”,答案为 3。