Algorithm 查找路径中无障碍物阻挡的最大覆盖元素
给定MXN矩阵,其中矩阵元素为“.”或“*”。哪里表示道路,*表示块或墙。人可以向前、向下和斜向移动相邻区域,我们需要找到被人覆盖的最大“距离”,而不被墙阻挡Algorithm 查找路径中无障碍物阻挡的最大覆盖元素,algorithm,matrix,graph,dynamic-programming,Algorithm,Matrix,Graph,Dynamic Programming,给定MXN矩阵,其中矩阵元素为“.”或“*”。哪里表示道路,*表示块或墙。人可以向前、向下和斜向移动相邻区域,我们需要找到被人覆盖的最大“距离”,而不被墙阻挡 你能给我建议一个有效的算法来解决这个问题吗?你是在寻找确切的路径还是只寻找案例的数量 编辑:这里是一个smallp Python脚本,它创建了一个随机矩阵,并计算“墙”定义的每个区域中的案例数 你必须这样做: 尽你最大的努力 你通过矩阵找到一个“.” 从那个点开始做洪水。淹没该区域的元素数量始终与已找到的最大值进行比较。为了方便起见,您可
你能给我建议一个有效的算法来解决这个问题吗?你是在寻找确切的路径还是只寻找案例的数量 编辑:这里是一个smallp Python脚本,它创建了一个随机矩阵,并计算“墙”定义的每个区域中的案例数 你必须这样做: 尽你最大的努力
我认为问题在于你可以通过循环得到无止境的路径。您是否允许用户在同一图元上多次行走?用户可以选择任何路径,但不能通过墙。所以可以有多条路径,但他需要选择“覆盖最大值”,而不通过任何块。刚才给了你一个脚本示例。@MathieuBour你的算法给了我错误的答案。我尝试了我的例子(在问题中给出的链接),它给我80,但答案是21。对不起,我的坏,我修改了问题。我需要找到人所覆盖的最大值。他可以选择任何道路。请看一个你们能理解的例子。它看起来像洪水填充,但在洪水填充中,您有一些起点,但这个起点没有任何起点。@abhi2244您可以选择任何起点。并进行洪水和更换。带*。你加的*的数量是你的面积。下一步是找到下一个。这将是你的第二次洪水等等。
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))
[[0 0 1 0 0 0 1 0 1 0]
[1 0 1 0 0 0 1 0 1 1]
[0 1 0 0 1 0 0 1 1 1]
[0 0 1 0 0 0 1 1 0 1]
[1 0 1 1 1 1 0 1 1 0]
[1 0 1 1 1 1 0 1 1 0]
[0 0 0 1 1 1 0 0 0 0]
[1 0 0 1 1 0 0 1 1 0]
[0 1 0 1 0 0 1 0 1 1]
[0 1 1 0 0 0 1 0 1 0]]
Max zone count : 50