【问题标题】:How to find the path between two random points in a matrix of 0 and 1如何在0和1的矩阵中找到两个随机点之间的路径
【发布时间】:2020-07-10 01:20:00
【问题描述】:

我正在尝试创建一个方法,在该方法中我得到一个 0 和 1 的方阵,其中 1 可以行走,0 是必须绕过的障碍,除了随机的起点和终点。

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

返回值分别为“右、上、右、右、下、右”和“下、右、下、右、右、上、右、上”。

谢谢

【问题讨论】:

  • 用什么语言? - 将其添加到问题的标签中(arraysmatrix 是)。
  • 欢迎来到 Stack Overflow。请分享一些对该问题的更多见解,如果信息不完整,很难回答。 stackoverflow.com/help/how-to-ask

标签: javascript java python arrays matrix


【解决方案1】:

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

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))

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

【讨论】:

  • 很简单,但它很好地解决了我的问题。非常感谢!
猜你喜欢
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 2018-08-31
  • 2012-12-17
  • 2014-09-22
相关资源
最近更新 更多