如何在0和1的矩阵中找到两个随机点之间的路径

时间:2020-07-10 01:20:00

标签: javascript java python arrays matrix

我正在尝试创建一种方法,使我得到一个0和1的方阵,其中1可以行走,0是除随机起点和终点之外必须克服的障碍。

我需要这种方法来使我对应该遵循的路径有所了解,例如:

example

返回值分别是“右,上,右,右,下,右”和“下,右,下,右,右,上,右,上”。

谢谢

1 个答案:

答案 0 :(得分:0)

一种方法可能是编写一个函数,该函数检查当前字段是否为目标字段,并为所有邻居递归调用此函数。在每个递归步骤中,您都将添加方向并在完成后返回完整路径。

dest_x = 4
dest_y = 1
visited = []

def next (path, x, y):
    visited.append ([x, y])
    
    # obstacle
    if matrix[x][y] == 0:
        return None
    
    # found destination
    if x == dest_x and y == dest_y:
        return path
    
    for i in [{'x': x - 1, 'y': y, 'direction': 'left'},
              {'x': x + 1, 'y': y, 'direction': 'right'},
              {'x': x, 'y': y - 1, 'direction': 'up'},
              {'x': x, 'y': y + 1, 'direction': 'down'}]:
        if [i['x'], i['y']] not in visited and i['x'] >= 0 and i['x'] < len(matrix) and i['y'] >= 0 and i['y'] < len(matrix[x]):
            n = next (path + [i['direction']], i['x'], i['y'])
            if n != None:
                return n
    
    
    

matrix = [[1,1,1,1],
          [1,1,1,1],
          [1,0,0,1],
          [1,1,1,1],
          [1,1,1,1]]

print (next ([], 0, 1))

如果有一种方法,它将找到一种方法。万一您需要最短的方法,可以在到达目的地时将路径存储在数组中,而不是返回路径。找到所有路径后,您可以打印最小长度的路径