算法 - 颜色被矩阵中的另一种颜色包围

Algorithm - Colour surrounded by another colour in a matrix

我最近在面试中遇到了这个问题:

给出以下矩阵:

[[ R R R R R R],
 [ R B B B R R],
 [ B R R R B B],
 [ R B R R R R]]

找出是否有任何一组只有R的只有B的在4个方向上被相反的颜色包围:上、下、左, 右角.

ex:上述矩阵的答案 -> 第二行中由 R 包围的 B 的有效集合。

[[ R R R R R R],
 [ R **B B B** R R],
 [ B R R R B B],
 [ R B R R R R]]

我尝试对所有方向的特定颜色进行 BFS,但无法找到解决方案。 谁能指导我找到解决方案。

要找到被 R 细胞包围的 B 细胞组,可以将矩阵想象成一个图,其顶点都是 B 细胞,边连接相邻的 B 细胞。使用BFS(或DFS)求出这个图的connected components,但是忽略边界上包含单元格的连通分量。每个(非边界)连接组件包含一组被 R 单元包围的 B 单元。然后,求B细胞包围的R细胞群,同理计算以R细胞为顶点的图的非边界连通分量

由于两个图的顶点和边数都是O(mn),并且可以在时间上找到图的连通分量集,该时间与图的大小成线性关系,运行时间这个算法是O(mn).