java - 如何在java中的简单矩阵中找到非相交的边界矩形?

标签 java algorithm sparse-matrix bounding-box

我有一个二维矩阵,看起来像

matr=([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 1., 0., 0., 0.],
       [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.]])

我需要编写 Java 代码来找到值 1 的非相交边界矩形

这里也有类似的问题: Fill Bounding Boxes in 2D array

但是解决方案是在 Python 上使用一些特殊的库,我需要在 Java 中实现它,而且在这种情况下我需要找到不相交的框

假设我们可以将点和矩形存储为

class Point{
    int x, y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

class Rectangle{
    Point topLeft, bottomRight;

    public Rectangle(Point topLeft, Point bottomRight) {
        this.topLeft = topLeft;
        this.bottomRight = bottomRight;
    }
}

在上面提供的示例中,答案应该是 Rectangle(Point(2,2), Point(5,4)),其他矩形相交,这就是为什么不需要计算它们

最佳答案

您可以使用 BFS (Breadth-first search)执行此操作的算法。

步骤如下:

  1. 遍历所有点(Matrix 中的所有值)并检查一个点是否具有值 1
  2. 从一个包含1
  3. 的未访问点开始
  4. 运行 BFS 以找到从该点开始的所有连接点。
  5. 标记/标记所有访问过的点。
  6. 计算连接点中的左上点和右下点。
  7. 从 2 开始。

关于java - 如何在java中的简单矩阵中找到非相交的边界矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57181596/

相关文章:

java - Spring:如何用常量值替换构造函数参数?

java - 就地快速排序问题

java - 无法反序列化,原因未知(MismatchedInputException)

python - isPrime 函数(列表 + % 运算符)

r - 递归矩阵的快速叉积

java - JPA/Hibernate - 不需要的部分回滚和 session 处理

c - 功能故意有一个高 cpu 负载?

algorithm - 动态规划练习的递归关系

matlab - 在 Matlab 中将稀疏矩阵行归一化为零均值

c++ - 帮助显示两个矩阵的总和(使用链表)