根据您的示例网格,似乎可以定义一个角,该角0
至少被 2 包围 1
。
你可以首先在一个愚蠢的实现中编写这个定义(就像我在下面故意做的那样),然后可能通过考虑性能来改进它。
2
表示此实现中的一个角
示例 Python 实现:
g = [[1,1,1,0],
[1,0,0,0],
[1,0,0,0],
[1,0,1,0],
[1,1,1,1]]
width = len(g[0])
height = len(g)
for i in range(height):
for j in range(width):
if g[i][j] != 0:
continue
around = [(i-1,j),(i+1,j),(i,j-1),(i,j+1)]
walls = 0
for (x,y) in around:
if x < 0 or x >= height or y < 0 or y >= width:
#Outside, count as wall
walls += 1
elif g[x][y] == 1:
walls += 1
if walls in [2,3]: # 4 would be inaccessible
g[i][j] = 2
输出:
[1, 1, 1, 2]
[1, 2, 0, 0]
[1, 0, 0, 0]
[1, 2, 1, 2]
[1, 1, 1, 1]