📌  相关文章
📜  根据给定查询在 Matrix 的相邻单元格之间创建边界后计算区域(1)

📅  最后修改于: 2023-12-03 14:55:40.520000             🧑  作者: Mango

根据给定查询在 Matrix 的相邻单元格之间创建边界后计算区域

这是一个用于在给定矩阵中根据查询创建边界并计算区域的程序。

输入

程序接收以下输入:

  • 一个 n x m 的矩阵,表示地图
  • 一个元素为[x1, y1, x2, y2]的查询,表示要在坐标为(x1, y1)和坐标为(x2, y2)的单元格之间创建边界
输出

程序输出要求在给定查询后计算出的区域的大小。如果无法形成封闭区域,则输出0。如果形成的区域不是一个完整的封闭区域,则输出该封闭区域的内部空洞的大小之和。

算法

以下是该程序实现的算法:

  1. 将所有与边界相邻的单元格标记为已访问
  2. 对剩余未访问的单元格进行遍历,并对每个连续区域进行计数和标记已访问
  3. 如果遍历完成后存在未访问的单元格,则计算未访问区域的内部空洞大小之和
代码片段

以下是该程序的主要代码片段:

def calculate_region(matrix: List[List[int]], query: List[int]) -> int:
    # Extract query coordinates
    x1, y1, x2, y2 = query

    # Mark all adjacent cells as visited
    visited = set()
    if x1 == x2:
        for i in range(min(y1, y2), max(y1, y2)):
            visited.add((x1, i))
    elif y1 == y2:
        for i in range(min(x1, x2), max(x1, x2)):
            visited.add((i, y1))

    # Traverse remaining unvisited cells
    regions = []
    for i in range(len(matrix)):
        for j in range(len(matrix[0])):
            if (i, j) not in visited and matrix[i][j] == 0:
                region = traverse_unvisited(matrix, visited, i, j)
                regions.append(region)

    # Handle regions with interior holes
    size = 0
    for region in regions:
        if not is_closed_region(region):
            size += calculate_interior_holes(region)

    return size

该代码片段包含了主函数calculate_region的核心逻辑,包括边界遍历和区域计数。