【问题标题】:Algorithm - Colour surrounded by another colour in a matrix算法 - 矩阵中被另一种颜色包围的颜色
【发布时间】:2020-02-03 09:52:53
【问题描述】:

我最近在一次采访中遇到了这个问题:

给定以下矩阵:

[[ 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 个方向上被相反颜色包围:上、下、左、右角。

例如:上述矩阵的答案 -> 第二行中由 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 覆盖了 3 条边,但第四条边碰到了边界。
  • 组只占一行还是可以多行?例如,它必须是直的还是交叉的?缺少细节
  • 您可以使用泛洪算法获取 O(m*n) 中的所有组。所有没有元素接触边界的组都是自动解决方案。

标签: algorithm matrix breadth-first-search


【解决方案1】:

要找到被 R 细胞包围的 B 细胞组,可以将矩阵视为一个图,其顶点是所有 B 细胞,边连接相邻的 B 细胞。使用 BFS(或 DFS)查找此图的connected components,但忽略边界上包含单元格的连通分量。每个(非边界)连通分量包含一组被 R 细胞包围的 B 细胞。然后,为了找到被 B 细胞包围的 R 细胞群,类似地计算以 R 细胞为顶点的图的无边界连通分量。

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

【讨论】:

    猜你喜欢
    • 2013-08-01
    • 2013-08-12
    • 1970-01-01
    • 2011-12-22
    • 2023-04-03
    • 2011-10-24
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    相关资源
    最近更新 更多