【问题标题】:How do I trace a path in matrix?如何跟踪矩阵中的路径?
【发布时间】:2021-04-19 22:59:18
【问题描述】:

我有如下矩阵:

[[0,0,0,0,0,0,0,0,0,0,0,0,0,0],
 [0,0,0,0,0,0,1,0,0,1,1,1,1,0],
 [0,0,0,0,0,0,1,0,0,1,0,0,1,0],
 [0,0,0,0,0,0,1,0,0,1,0,0,1,0],
 [0,0,0,0,0,0,1,0,0,1,0,0,1,0],
 [0,0,0,0,0,0,1,0,0,1,1,1,1,0],
 [0,0,0,0,0,0,1,0,0,1,0,0,0,0],
 [0,0,0,0,0,0,1,0,0,1,0,0,0,0],
 [0,0,0,0,0,0,1,1,1,1,1,1,1,0],
 [0,0,0,0,0,0,0,0,0,0,0,0,0,0]]

如何在矩阵中找到跟踪 1 的路径?正如您所看到的,矩阵的 1 代表类似于单词“U2”的东西,我想返回一条类似于它应该遵循的像素的路径来绘制它。如果它已经向前移动了,它可以向后移动一条路径,但它不应该跳一个 0,它应该总是在 1 上移动。

【问题讨论】:

  • 在理解您的需求时遇到了一些麻烦。 1s不代表这样的路径吗?如果要绘制它,可以将背景转换为黑色,并将 1 转换为 RGB 中的白色。
  • 您想要做的与做图形seed or flood fill 非常相似,因此您可以调整算法以产生您想要的结果。
  • 您的问题是如果有超过 1 个路径可用,如何选择要走的路径。这使得它依赖于一些寻路方法。您可以将所有 0 设置为墙壁,然后使用 Bellman Ford method 进行扩散寻路。

标签: python arrays algorithm matrix path-finding


【解决方案1】:

如果您只想要一个包含数字 1 位置的列表列表,您可以迭代,您可以执行以下操作:

>>>block = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0],
...         [0,0,0,0,0,0,1,0,0,1,1,1,1,0],
...         [0,0,0,0,0,0,1,0,0,1,0,0,1,0],
...         [0,0,0,0,0,0,1,0,0,1,0,0,1,0],
...         [0,0,0,0,0,0,1,0,0,1,0,0,1,0],
...         [0,0,0,0,0,0,1,0,0,1,1,1,1,0],
...         [0,0,0,0,0,0,1,0,0,1,0,0,0,0],
...         [0,0,0,0,0,0,1,0,0,1,0,0,0,0],
...         [0,0,0,0,0,0,1,1,1,1,1,1,1,0],
...         [0,0,0,0,0,0,0,0,0,0,0,0,0,0]]

>>> answer = []
>>> for i in block:
...    answer.append([j for j, e in enumerate(i) if e == 1])

>>>answer
[[], [6, 9, 10, 11, 12], [6, 9, 12], [6, 9, 12], [6, 9, 12], [6, 9, 10, 11, 12], [6, 9], [6, 9], [6, 7, 8, 9, 10, 11, 12], []]

【讨论】:

    【解决方案2】:
    a = [[0,0,0,0,0,0,0,0,0,0,0,0,0,0],
         [0,0,0,0,0,0,1,0,0,1,1,1,1,0],
         [0,0,0,0,0,0,1,0,0,1,0,0,1,0],
         [0,0,0,0,0,0,1,0,0,1,0,0,1,0],
         [0,0,0,0,0,0,1,0,0,1,0,0,1,0],
         [0,0,0,0,0,0,1,0,0,1,1,1,1,0],
         [0,0,0,0,0,0,1,0,0,1,0,0,0,0],
         [0,0,0,0,0,0,1,0,0,1,0,0,0,0],
         [0,0,0,0,0,0,1,1,1,1,1,1,1,0],
         [0,0,0,0,0,0,0,0,0,0,0,0,0,0]]
    
    
    class U2:
    
        def __init__(self, matrix):
            self.matrix = matrix
            self.solved = []
    
        def find_path(self):
            for line in self.matrix:
                comprehension = ["___" if item==1 else item=="x" for item in line]             
                self.solved.append(comprehension)
            return self.solved
    
    
    
    a = U2(a)
    solved = a.find_path()
    for i in solved:
        print(i)
    

    这样的? 这是输出:

    [False, False, False, False, False, False, False, False, False, False, False, False, False, False]
    [False, False, False, False, False, False, '___', False, False, '___', '___', '___', '___', False]
    [False, False, False, False, False, False, '___', False, False, '___', False, False, '___', False]
    [False, False, False, False, False, False, '___', False, False, '___', False, False, '___', False]
    [False, False, False, False, False, False, '___', False, False, '___', False, False, '___', False]
    [False, False, False, False, False, False, '___', False, False, '___', '___', '___', '___', False]
    [False, False, False, False, False, False, '___', False, False, '___', False, False, False, False]
    [False, False, False, False, False, False, '___', False, False, '___', False, False, False, False]
    [False, False, False, False, False, False, '___', '___', '___', '___', '___', '___', '___', False]
    [False, False, False, False, False, False, False, False, False, False, False, False, False, False]
    

    【讨论】:

      猜你喜欢
      • 2016-09-15
      • 1970-01-01
      • 2013-01-29
      • 2012-11-24
      • 2018-06-05
      • 1970-01-01
      • 2012-04-04
      • 2015-07-06
      • 1970-01-01
      相关资源
      最近更新 更多