本题的核心是找出网格中所有由同类昆虫构成的连通区域(即“栖息群落”),并在划分群落的同时统计每个群落边界上与多少种不同类别的昆虫相邻。具体步骤如下:
连通域划分与编号
利用广度优先搜索(BFS)或深度优先搜索(DFS)遍历整个网格,将上下左右相邻且昆虫类别相同的格子归为同一个栖息群落。使用一个二维数组 comp 记录每个格子所属的群落编号(从 0 开始递增),未访问的格子初始标记为 -1。
统计邻接的异类昆虫种类
在 BFS 搜索某个群落的过程中,对于每个格子检查其四个方向的邻居:
研究员获得一张 n 行 m 列的生态网格地图,每个格子栖息一种昆虫,用小写字母 ci,j 表示其类别。定义两个格子在上下左右相邻时 (∣x1−x2∣+∣y1−y2∣=1) 称为相邻。连通的同类格子构成一个“栖息群落”,即同一群落内任意两个格子可通过若干步相邻移动到达且途中格子类别相同。
对于网格中每一个格子,请回答:该格子所属的栖息群落与多少种其他昆虫相邻(即群落边界上存在相邻的不同类别格子,统计这些不同类别的数量,不包含自身类别)。
数据范围:行数 n 与列数 m 满足 1≤n,m≤500。网格中所有字符均为小写字母。
第一行包含两个整数 n 和 m,表示网格的行数和列数。 接下来 n 行,每行一个长度为 m 的由小写字母组成的字符串,第 i 行第 j 个字符代表格子 (i,j) 的昆虫类别。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.