我正在尝试创建一个函数,该函数给出一个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。
答案 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