簡體   English   中英

二維數組中的孔數 (Python)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM