【问题标题】:Finding a path using the Parents Array Recursively in Python在 Python 中递归地使用父母数组查找路径
【发布时间】:2015-03-19 22:49:16
【问题描述】:

所以我有一个任务,那就是写一个函数,它接受一个遍历产生的父数组、一个起始顶点和一个结束顶点,并产生一条从起始顶点到结束顶点的路径。

我已经尝试为此编写代码

def tree_path(parents, start, end):
    if ((start == end) or (end == -1)):
        return [start, end]
    else:
        return tree_path(parents, start, parents[end])

它没有做我打算做的事情。我不太擅长递归。任何帮助将非常感激。谢谢

【问题讨论】:

  • parents[end] 是一个列表吗?

标签: python recursion path-finding


【解决方案1】:

您可以尝试,假设我们想要从startend 的所有顶点的列表,如下:

def tree_path(parents, start, end):
    if (start == end) or (end == -1):
        return [start]
    else:
        return tree_path(parents, start, parents[end]) + [end]

如果startend 重合,那么我们的路径仅包含一个顶点:start。否则,我们会找到从startend 的父节点的路径,并在此路径中添加end 节点。

【讨论】:

    【解决方案2】:

    你一直递归直到start==end,然后返回[start,end]。那总是[start,start](因为start==end),所以你什么也学不到。您只需要在第一个 return 语句中返回 [start],因为返回 [start,end] 将返回两次具有相同元素的列表。另一个 return 语句也需要添加一些东西;否则,您将只返回两个元素:return tree_path(parents, start, parents[end]) + [end]

    不过,这也有问题(我假设)。 parents[end] 是(我认为)父母名单。不过,tree_path() 只需要一个端节点。您需要遍历它们以查看哪个有效(如果我错认为它是一个列表,请忽略这部分并使用上面的代码):

    for i in parents[end]:
        path = tree_path(parents,start,i):
        if path:
            return path + [end]
    

    这假定tree_path() 在找不到路径时返回错误值。您需要检查 end 是否是根节点。我认为这就是 end==-1 检查所做的。把这些放在一起,你会得到这样的结果:

    def tree_path(parents, start, end):
        if end==-1:
            return None
        if start==end:
            return [end]
        else:
            for i in parents[end]:
                path = tree_path(parents,start,i):
                if path:
                    return path + [end]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      • 1970-01-01
      • 2016-01-20
      相关资源
      最近更新 更多