在Python中使用父数组递归查找路径

在Python中使用父数组递归查找路径,python,recursion,path-finding,Python,Recursion,Path Finding,所以我有一个任务,就是写一个函数,它接受一个遍历产生的父数组,一个起始顶点和一个结束顶点,并产生一条从起始顶点到结束顶点的路径 我已经试过为此编写代码 def tree_path(parents, start, end): if ((start == end) or (end == -1)): return [start, end] else: return tree_path(parents, start, parents[end]) 它没有做

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

我已经试过为此编写代码

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

它没有做我想让它做的事。我不太擅长递归。任何帮助都将不胜感激。谢谢

您可以尝试,假设我们需要从
开始
结束
的所有顶点的列表,请执行以下操作:

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

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

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

不过(我想)这也有问题
parents[end]
是(我认为)一个家长列表<代码>树路径()只需要一个端点节点。您需要对它们进行迭代以查看哪一个是有效的(如果我错误地认为它是一个列表,请忽略这一部分并使用上面的代码):

这假设
tree\u 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]

parents[end]
是列表吗?
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]