查找二维数组子空间的面积?

时间:2019-11-26 06:52:00

标签: python arrays breadth-first-search

我正在尝试创建一个函数,该函数给出一个0或1的2d数组和一组坐标,并返回与给定坐标具有相同值的所选区域的面积。

例如给定数组:

[[0, 1, 0, 0, 0],
 [0, 1, 0, 0, 0],
 [0, 1, 0, 0, 0],
 [0, 1, 0, 0, 0],
 [0, 1, 0, 0, 0]]

和坐标[0,0],它将返回5。

我尝试了一个简单的DFS,但遇到了多次在同一位置运行的问题,返回了异常大的区域,如330。

1 个答案:

答案 0 :(得分:0)

我真的想通了!

基本上,它遵循BFS搜索,仅向上,向下,向左和向右查找。

寻找邻居的部分从this answer转到另一个问题。

def find_area(arr, x, y):
    queue = [(x,y)]
    visited = []
    w = len(arr[0])
    h = len(arr)
    area = 0
    while len(queue) != 0:
        curr = queue.pop(0)
        print(curr)
        x = curr[0]
        y = curr[1]
        if arr[curr[0]][curr[1]] == 0 and curr not in visited:
            area += 1
            visited.append(curr)
            neighbors = [(x+a[0], y+a[1]) 
                            for a in [(-1,0), (1,0), (0,-1), (0,1)] 
                            if ((0 <= x+a[0] < w) and (0 <= y+a[1] < h))]
            for i in neighbors:
                if i not in visited:
                    queue.append(i)
    return area