给定MXN矩阵,其中矩阵元素是“。”要么 ”*”。在哪里代表道路,*代表街区或墙壁。人可以向前,向下和对角移动,我们需要找到最大的“。”没有被墙挡住的人所覆盖。 Example(in image)
你能否建议我有效的算法来解决这个问题?
答案 0 :(得分:0)
您是在寻找确切路径还是仅查找案例数?
编辑:这里是一个小脚本Python脚本,它创建一个随机矩阵,并计算由"墙壁定义的每个区域中的案例数量。
LinkedHashSet
结果如下:
import numpy as np
matrix = np.random.randint(2, size=(10, 10))
print(matrix)
M, N = matrix.shape
walked = []
zonesCount = []
def pathCount(x, y):
if x < 0 or y < 0 or x >= M or y >= N:
return 0
if matrix[x, y] == 1: # I replaced * by 1 and . by 0 for easier generation
return 0
if (x, y) in walked:
return 0
walked.append((x, y))
count = 1
for i in [x - 1, x, x + 1]:
for j in [y - 1, y, y + 1]:
if (i, j) != (x, y):
count += pathCount(i, j)
return count
for x in range(M):
for y in range(N):
if not (x, y) in walked:
zonesCount.append(pathCount(x, y))
print('Max zone count :', max(zonesCount))
答案 1 :(得分:0)
你必须这样做:https://en.wikipedia.org/wiki/Flood_fill 你可以做最大的洪水。