[英]Number of holes in a 2d array (Python)
考慮一個二進制二維數組。 我正在嘗試計算連接的零點的數量,以使這些零點創建的形狀完全被 1 包圍(因此,不在邊界上)。 我只需要知道陣列中是否至少存在 1 個孔。
洞的例子:
1 hole
111
101
101
111
1 hole
0000
1011
0110
1001
1011
1110
無效洞的例子:
101
111
001
01111
11001
10001
10001
10011
10111
我看過“島嶼數量”問題和連接的組件,但我似乎無法找到一種方法來適應這些問題。 我遇到的主要問題是確保當 0 的集合包含邊界數字時,它仍然被算作一個洞。
有誰知道這個問題到 go 的正確方向是什么?
這是一個完整的 Python 程序:
input = """0100
1011
0110
1011
1001
1110"""
grid = input.splitlines()
holes = 0
seen = set()
def is_in_hole(x, y):
'''dfs'''
seen.add((x, y))
if grid[y][x] != '0': return True
if y in [0, len(grid) - 1] or x in [0, len(grid[0]) - 1]: return False
for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
nei_x, nei_y = x + dx, y + dy
if (nei_x, nei_y) in seen: continue
seen.add((nei_x, nei_y))
if not is_in_hole(nei_x, nei_y): return False
return True
for y in range(1, len(grid) - 1):
for x in range(1, len(grid[0]) - 1):
if (x, y) not in seen and grid[y][x] == '0':
if is_in_hole(x, y): holes += 1
print(holes)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.